Как передать собственность надежное хранилище в Gradle скрипт сборки



Я пытаюсь создать классы для веб-сервиса SOAP с помощью скрипта gradle. Я использую плагин gradle-jaxws-plugin, который доступен в maven central.



Мой сценарий выглядит следующим образом:



buildscript {   
repositories {
mavenCentral()
}
dependencies {
classpath "eu.schnuckelig.gradle:gradle-jaxws-plugin:1.0.2"
}
}

apply plugin: 'maven'
apply plugin: 'jaxws'

jaxws {
System.setProperty('javax.xml.accessExternalSchema', 'all')
packageName = 'com.myservice'
wsdlURL = 'https://example.org/services/users.svc?wsdl'
}

repositories {
mavenCentral()
}


Если я использую этот скрипт как есть, я получаю следующую ошибку



[ant:wsimport] [ERROR] sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


Один из способов разрешения этой ошибки, который я пробовал, - это gradle build -Djavax.net.ssl.trustStore=cacerts -Djavax.net.ssl.trustStorePassword=changeit. Это сработало. Но я хочу передать эти свойства jvm в build script.

Я пробовал systemProperty.set(), но это не сработало. Я пытаюсь с gradle.properties, но это не работает любой. Есть ли чистый способ передать эти свойства? Кроме того, мне интересно, как я буду справляться с этим в производстве, когда у меня будет автоматизированная сборка.

637   2  

2 ответов:

Обычно, поскольку такие данные являются конфиденциальными, они должны передаваться через командную строку или - если у вас есть автоматизированная сборка в производстве-должны быть настроены в системе, например, через переменные среды (именно так это обрабатывается чаще всего).

Вы можете настроить свойства системы через gradle.properties, но они должны быть предварены префиксом systemProp, поэтому:

Градля.свойства :

systemProp.javax.net.ssl.trustStore=cacerts
systemProp.javax.net.ssl.trustStorePassword=changeit

Также следующий фрагмент кода, помещенный в build.gradle непосредственно под разделом apply, должен работать также: построить.gradle

buildscript {   
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "eu.schnuckelig.gradle:gradle-jaxws-plugin:1.0.2"
    }
}

apply plugin: 'maven'
apply plugin: 'jaxws'

System.setProperty('javax.net.ssl.trustStore', 'cacerts')
System.setProperty('javax.net.ssl.trustStorePassword', 'changeit')

Это должно сработать

configurations {
    jaxws
}

dependencies {
    jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
}

task wsimport {
    ext.destDir = file("${projectDir}/src/main/generated")
    System.setProperty('javax.net.ssl.keyStoreType', 'pkcs12')
    System.setProperty('javax.net.ssl.keyStore', 'client.pfx')
    System.setProperty('javax.net.ssl.keyStorePassword', 'xxxxxxxxx')
    System.setProperty('javax.net.ssl.keyPassword', 'xxxxxxxxx')
    System.setProperty('javax.net.ssl.trustStore', 'truststore.jks')
    System.setProperty('javax.net.ssl.trustStorePassword', 'xxxxxxxx')
    System.setProperty('sun.security.ssl.allowUnsafeRenegotiation','true')
    doLast {
        ant {
            sourceSets.main.output.classesDir.mkdirs()
            destDir.mkdirs()
            taskdef(name: 'wsimport',
                    classname: 'com.sun.tools.ws.ant.WsImport',
                    classpath: configurations.jaxws.asPath
            )
            wsimport(keep: true,
                    destdir: sourceSets.main.output.classesDir,
                    sourcedestdir: destDir,
                    extension: "true",
                    verbose: "false",
                    quiet: "false",
                    package: "com.example.client.api",
                    xnocompile: "true",
                    wsdl: 'https://test.com/test.asmx?wsdl') {
                xjcarg(value: "-XautoNameResolution")
            }
        }
    }
}

compileJava {
    dependsOn wsimport
    source wsimport.destDir
}

Comments

    Ничего не найдено.