我有一个maven插件(jaxb2),我需要提供一个jvm arg。我不认为有一个标签可以在pom中添加jvm args。
我知道我可以在命令行传递jvm args,例如:mvn clean install -Djavax.xml.accessExternalSchema=all
是否可以在pom中设置此jvm arg,以便每次都不必在命令行中键入它?
(除此之外 - 这个jvm arg是必需的,以便它可以与JAVA-8一起使用。它适用于JAVA-7)
答案 0 :(得分:31)
这与Java 8中引入的新XML security properties in JAXB 1.5相关。这就是为什么您的构建现在在Java 8上失败但与Java 7一起使用。
如果您使用的是maven-jaxb2-plugin
,请升级到版本0.9.0
或更高版本(当前为0.10.0
)。它现在有一个accessExternalSchema
开关(默认为all
)。
这精确设定javax.xml.accessExternalSchema=all
。
请参阅documentation。
答案 1 :(得分:17)
我在使用jaxb2-maven-plugin时遇到了这个问题。我找到了maven-jabx2-plugin的相关jira问题 - 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>
答案 2 :(得分:7)
重新;帖子 - “我需要一个不使用alpha版本的解决方案,因为这是我的公司规则。”
将版本更改为1.0&amp; 'all'的价值使它适合我:
<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>
答案 3 :(得分:3)
它对我有用:
<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>
答案 4 :(得分:0)
看一下Maven编译器插件。具体来说,您应该能够使用<compilerArgument>
元素将设置传递给编译器。
有关示例,请参阅http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html。
答案 5 :(得分:0)
如果您尝试更改运行Maven本身的JVM的行为,请在启动mvn之前向环境中的MAVEN_OPTS添加选项。