كيفية تجاوز قيود الوصول إلى مهمة gradle wsimport JDK 8؟
سؤال
لدي مهمة wsimport في بناء gradle الخاص بي يعمل بشكل جيد حتى Java 7:
task wsimport {
ext.destDir = file("${buildDir}/generated/java")
ext.wsdlSrc = file("src/main/resources/schema/example/my.wsdl")
ext.bindingSrc = file("src/main/resources/schema/example/bindings.xsd")
outputs.dir destDir
doLast {
ant {
destDir.mkdirs()
taskdef(name: 'wsimport',
classname: 'com.sun.tools.ws.ant.WsImport',
classpath: configurations.jaxws.asPath)
wsimport(keep: true,
package: 'net.example.my',
xnocompile: true,
quiet: true,
sourcedestdir: destDir,
wsdl: wsdlSrc,
binding: bindingSrc,
encoding: "UTF-8"
)
}
}
}
عند التبديل إلى JDK 8 (النسخة 1.8.0-b129) أحصل على الخطأ التالي:
java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: ... schema_reference:
Failed to read schema document 'xjc.xsd', because 'file' access is not allowed due to restriction set by the accessExternalSchema property.
أثناء البحث عن المشكلة وجدت المنشور التالي (يصف المشكلة أيضًا مع Java 7 بشكل مدهش): https://github.com/stianh/gradle-jaxb-plugin/issues/20لكنني غير قادر على تمرير البيئة/الوسيطة إلى wsimport/xjc.
كيفية تعطيل هذا الوصول أو التقييد؟
المحلول
كان الحل العملي الوحيد الذي وجدته هو تعيين خاصية النظام باستخدام الانعكاس:
task wsimport {
System.setProperty('javax.xml.accessExternalSchema', 'file')
...
}
جميع الحلول الأخرى باستخدام ext
أو systemProperty
لا يعمل بالنسبة لي.لقد قمت بتثبيت gradle 1.11.
لا تنتمي إلى StackOverflow