Как указать 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.