2015-06-14 10 views
1

У меня есть Maven проект нескольких модулей в следующем составе:Использование XJB с jaxb2-Maven-плагин

root-module 
    |__module-a 
    | |__src 
    |  |__main 
    |   |__xsd 
    |   | |__my.xsd 
    |   |__xjb 
    |     |__my.xjb 
    |__module-b 

ПОМ для корневого модуля накапливает модуля а и б (среди прочего):

<project> 
    <artifactId>root-module</artifactId> 
    <packaging>pom</packaging> 
    <modules> 
    <module>module-a</module> 
    <module>module-b</module> 
    </modules> 
</project> 

И POM для модуля а следующим образом (среди прочего):

<project> 
    <parent> 
    <artifactId>root-module</artifactId> 
    </parent> 
    <artifactId>module-a</artifactId> 
    <properties> 
    <my-definitions.xsd>${basedir}/src/main/xsd/my.xsd</my-definitions.xsd> 
    <my-bindings.xjb>${basedir}/src/main/xjb/my.xjb</my-bindings.xjb> 
    <my.output>${basedir}/target/generated-sources/jaxb/my</my.output> 
    </properties> 
    <build> 
    <plugins> 
     <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>generate-my-classes</id> 
         <phase>generate-sources</phase> 
         <goals><goal>xjc</goal></goals> 
         <configuration> 
          <sources><source>${my-definitions.xsd}</source></sources> 
          <xjbSources><xjbSource>${my-bindings.xjb}</xjbSource></xjbSources> 
          <outputDirectory>${my.output}</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

так что, когда я бегу MVN на модуле-а, кануна rything отлично работает, и сборка преуспевает. Но когда я запускаю его в корневом модуле, я получаю исключение из плагина XJC, где он пытается найти привязки файл в корневом-модуле:

com.sun.istack.SAXParseException2; IOException thrown when processing "file:/home/root-module/src/main/xjb/my.xjb". Exception: java.io.FileNotFoundException: /home/root-module/src/main/xjb/my.xjb (The system cannot find the path specified). 

Что интересно, он может определить местонахождение XSD правильно:

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.1:xjc (generate-my-classe) on project module-a: 
[ERROR] +=================== [XJC Error] 
[ERROR] | 
[ERROR] | 0: file:/home/root-module/module-a/src/main/xsd/my.xsd 
[ERROR] | 
[ERROR] +=================== [End XJC Error] 
  • Любые подсказки?
  • Это проблема конфигурации в скрипте сборки?

Специфика моей системы сборки:

Using Maven 3.2.5 

<groupId>org.codehaus.mojo</groupId> 
<artifactId>jaxb2-maven-plugin</artifactId> 
<version>2.1</version> 

Ссылаясь плагин документации JAXB2 Maven из here. Также искали несколько связанных вопросов на SO, но они не объясняют мою конкретную проблему нигде.

UPDATE: Похож на open issue. Сохранение потока в случае, если есть обходной путь.

ответ

0

Пока разрешение плагин не доступен, я использую следующий муравей запустить хак:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>generate-my-classes</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <tasks> 
         <mkdir dir="${project.build.directory}/generated-sources/jaxb/my" /> 
         <exec executable="${env.JAVA_HOME}/bin/xjc.exe" dir="${project.basedir}/src/main/xsd"> 
          <arg value="-p" /> 
          <arg value="my.package" /> 
          <arg value="-b" /> 
          <arg value="${project.basedir}/src/main/xjb" /> 
          <arg value="-d" /> 
          <arg value="${project.build.directory}/generated-sources/jaxb" /> 
          <arg value="." /> 
         </exec> 
        </tasks> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

ОБНОВЛЕНИЕ:

Обсуждение на Github.

Рассмотрение Apache CXF Utils в качестве альтернативы.

2

Возможно, обновление до версии 2.2 плагина.

<groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>2.2</version> 

У меня была такая же проблема при использовании версии 2.1 плагина. Исправлена ​​проблема с заменой версии 2.2.

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

  • Нет связанных вопросов^_^