Как передать собственность надежное хранилище в 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, но это не работает любой. Есть ли чистый способ передать эти свойства? Кроме того, мне интересно, как я буду справляться с этим в производстве, когда у меня будет автоматизированная сборка.
2 ответов:
Обычно, поскольку такие данные являются конфиденциальными, они должны передаваться через командную строку или - если у вас есть автоматизированная сборка в производстве-должны быть настроены в системе, например, через переменные среды (именно так это обрабатывается чаще всего).
Вы можете настроить свойства системы через
gradle.properties, но они должны быть предварены префиксомsystemProp, поэтому:Градля.свойства :
systemProp.javax.net.ssl.trustStore=cacerts systemProp.javax.net.ssl.trustStorePassword=changeitТакже следующий фрагмент кода, помещенный в
build.gradleнепосредственно под разделомapply, должен работать также: построить.gradlebuildscript { 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