2014-10-13 5 views
17

У меня есть плагин maven (jaxb2), и мне нужно предоставить ему jvm arg. Я не думаю, что есть метка, чтобы добавить jvm args в pom для этого.Как указать javax.xml.accessExternalSchema для плагина Maven JAXB2

Я знаю, что я могу передать в Jvm аргументах в командной строке, например: mvn clean install -Djavax.xml.accessExternalSchema=all

Можно ли установить этот Jvm ARG в ПОМ, так что мне не придется вводить его в командную строку каждый раз, когда ?

(как в сторону - это JVM аргумент необходим для того, чтобы он работать с JAVA-8 Он отлично работает с JAVA-7.)

ответ

23

Это относится к новым XML security properties in JAXB 1.5, введенному в Java 8. Вот почему ваш собираемой сейчас не в состоянии на Java 8, но работать с Java 7.

Если вы используете мои maven-jaxb2-plugin, пожалуйста, обновите до версии 0.9.0 или более поздней версии (текущий - 0.10.0). Теперь он имеет переключатель accessExternalSchema (по умолчанию all).

Это устанавливает точно javax.xml.accessExternalSchema=all.

См. documentation.

+0

Спасибо! Переключение с плагина codehaus на вашу недавнюю версию решило проблему. Никакой добавленной конфигурации не требуется :) –

+0

В документации упоминается, что ACCESS_EXTERNAL_SCHEMA имеет значение по умолчанию для всех, так зачем нам его устанавливать? –

0

Посмотрите на Maven Compiler Plugin. В частности, вы должны иметь возможность использовать элемент <compilerArgument> для передачи настроек компилятору.

Для примера см. http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html.

+0

Он не пытается говорить с компилятором. – bmargulies

0

Если вы пытаетесь изменить поведение JVM, на котором запущен Maven, добавьте параметры в MAVEN_OPTS в среде перед запуском mvn.

+0

Это относится к новым свойствам безопасности XML в JAXB 1.5, представленным на Java 8, поэтому на самом деле это не должно быть «Maven global», а скорее всего для компиляции схемы. http://docs.oracle.com/javase/tutorial/jaxp/properties/properties.html – lexicore

+0

Кто знает, имеет ли он плагин Maven, он использует ваш плагин maven или использует какой-либо другой плагин maven? – bmargulies

+0

@margulies Я думаю, что OP ясно заявляет, что он * использует * один из JAXB2 Maven плагинов («У меня есть плагин maven (jaxb2) ...»), и тег предлагает использовать его. В заметке у моего ответа есть «If ...». – lexicore

16

Я столкнулся с этой проблемой при работе с 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> 
+0

приятный ответ - спасибо. Мне нужно решение, которое не использует альфа-версии, поскольку это правила моих компаний. – Josh

+0

Если у вас нет действительно внешних схем, он может работать только с атрибутом 'file'. Это то, что мне нужно, чтобы получить org.jvnet.ws.wadl: wadl-client-plugin: 1.1.6, работающий с Java 8. –

7

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> 
2

Он работал для меня:

<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> 
+2

Пожалуйста, объясните, почему это работает для вас и почему это помогает OP - не просто код дампа , –

Смежные вопросы