Как указать javax.xml.accessExternalSchema для плагина Maven JAXB2
У меня есть плагин 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)
Ответы
Ответ 1
Это относится к новым свойствам безопасности 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
.
См. документацию .
Ответ 2
Я столкнулся с этой проблемой при работе с jaxb2-maven-plugin. Я нашел связанную проблему с jira для maven-jabx2-plugin - https://java.net/projects/maven-jaxb2-plugin/lists/issues/archive/2014-03/message/0
Согласно этой проблеме, Stephan202 предложил использовать свойства-maven-plugin, которые работали как обаяние. Вот пример кода из его сообщения -
<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>
Ответ 3
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>
Ответ 4
Это сработало для меня:
<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>
Ответ 5
Взгляните на Maven Compiler Plugin. В частности, вы должны иметь возможность использовать элемент <compilerArgument>
для передачи настроек компилятору.
См. http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html для примеров.
Ответ 6
Если вы пытаетесь изменить поведение JVM, на котором запущен Maven, добавьте опции в MAVEN_OPTS в среде перед запуском mvn.