Как указать javax.XML.accessExternalSchema для плагина Jaxb2 Maven
У меня есть плагин maven (jaxb2), и мне нужно предоставить ему JVM arg. Я не думаю, что есть тег для добавления JVM args в pom для него.
Я знаю, что могу передать в JVM args в командной строке, например:mvn clean install -Djavax.xml.accessExternalSchema=all
можно ли установить этот JVM arg в pom, чтобы мне не приходилось вводить его в командную строку каждый раз?
(в стороне-этот JVM arg необходим для того, чтобы он работал с JAVA-8. Он отлично работает с JAVA-7)
6 ответов
это имеет отношение к новой свойства безопасности XML в JAXB 1.5, введенный в Java 8. Вот почему ваши сборки теперь терпят неудачу на Java 8, но работают с Java 7.
если вы используете мой maven-jaxb2-plugin
, пожалуйста, обновите до версии 0.9.0
или позже (ток 0.10.0
). Сейчас это accessExternalSchema
переключатель (по умолчанию:all
).
это задает именно javax.xml.accessExternalSchema=all
.
смотрите документация.
я столкнулся с этой проблемой во время работы с jaxb2-maven-plugin. Я нашел связанную проблему jira для maven-jabx2-plugin - https://java.net/projects/maven-jaxb2-plugin/lists/issues/archive/2014-03/message/0
в соответствии с этой проблемой Stephan202 предложил использовать свойства-Maven-плагин, который работал как шарм. Вот пример кода из его поста -
<plugin>
<!-- We use this plugin to ensure that our usage of the
maven-jaxb2-plugin is JDK 8 compatible in absence of a fix
for https://java.net/jira/browse/MAVEN_JAXB2_PLUGIN-80. -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>set-additional-system-properties</id>
<goals>
<goal>set-system-properties</goal>
</goals>
</execution>
</executions>
<configuration>
<properties>
<property>
<name>javax.xml.accessExternalSchema</name>
<value>file,http</value>
</property>
</properties>
</configuration>
</plugin>
Re; сообщение- " мне нужно решение, которое не использует альфа-версии, так как это правила моих компаний. –"
изменение версии на 1.0 и значение " все " заставило его работать для меня:
<plugin>
<!-- We use this plugin to ensure that our usage of the
maven-jaxb2-plugin is JDK 8 compatible in absence of a fix
for https://java.net/jira/browse/MAVEN_JAXB2_PLUGIN-80. -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<!--
<version>1.0-alpha-2</version> -->
<version>1.0.0</version>
<executions>
<execution>
<id>set-additional-system-properties</id>
<goals>
<goal>set-system-properties</goal>
</goals>
</execution>
</executions>
<configuration>
<properties>
<property>
<name>javax.xml.accessExternalSchema</name>
<value>all</value>
</property>
</properties>
</configuration>
</plugin>
это сработало для меня:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<vmArgs>
<arg>-Djavax.xml.accessExternalSchema=all</arg>
</vmArgs>
<keep>true</keep>
<verbose>true</verbose>
<wsdlDirectory>${project.build.directory}/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>ServiceWsService.wsdl</wsdlFile>
</wsdlFiles>
<bindingFiles>
<bindingFile>custom-binding.xml</bindingFile>
<bindingFile>custom-binding2.xml</bindingFile>
</bindingFiles>
</configuration>
</execution>
</executions>
</plugin>
взгляните на плагин компилятора Maven. В частности, вы должны иметь возможность использовать <compilerArgument>
элемент для передачи параметров компилятору.
см http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html для примера.
Если вы пытаетесь изменить поведение JVM, который запускает Maven, добавьте опции в MAVEN_OPTS в среде перед запуском mvn.