2016-09-26 4 views
2

私は、ソースを生成するためにjaxb2-maven-plugin (mojohaus one)が使用されるmavenプロジェクトを持っています。2つのLinuxパスがmavenの同じファイルを参照するときを検出するにはどうすればよいですか?

ジェンキンスで呼び出されると、生成されたすべてのクラスが重複しているために失敗します。

いくつかの調査の後、私は

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ my-maven-module --- 
[DEBUG] Using compiler 'javac'. 
[DEBUG] Source directories: [/var/lib/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/src/main/java 
/var/lib/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/target/generated/src/main/java 
/appli/projects/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/target/generated/src/main/java] 

それが表示されますのmaven-コンパイラプラグインで、この構成にそれを追跡でき、/var/lib/jenkinsフォルダが/appli/projects/jenkinsにリンクされています。そして、JAXB2-のmaven-pluginの中で、我々が設定された構成が

+=================== [16 XJC Arguments] 
| 
| [0]: -xmlschema 
| [1]: -encoding 
| [2]: UTF-8 
| [3]: -p 
| [4]: fr.erdf.sge.f5.asm 
| [5]: -d 
| [6]: /var/lib/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/target/generated/src/main/java 
| [7]: -classpath 
| [8]: /logiciels/maven/apache-maven-3.1.1/conf/logging/ 
| [9]: -extension 
| [10]: -episode 
| [11]: /appli/projects/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/target/generated/src/main/java/META-INF/sun-jaxb.episode 
| [12]: -Xvisitor 
| [13]: -Xvisitor-package:com.massfords.humantask 
| [14]: m-maven-supermodule/my-maven-module/src/main/resources/xsd/asm/asmbuilder.xsd 
| [15]: m-maven-supermodule/my-maven-module/src/main/resources/xsd/import_export_xml.xsd 
| 
+=================== [End 16 XJC Arguments] 

である私たちは、違いを見ることができ、ここで、既に存在している:-d引数は-episode引数が/appli/projects/jenkins/を指し/var/lib/jenkinsを指します。

そして、それはJAXB2プラグインのここに記載された

[DEBUG] Adding existing JAXB outputDirectory [/appli/projects/jenkins/jobs/MY_JENKINS_JOB/workspace/myProject/target/generated/src/main/java] to Maven's sources. 

EDIT 1設定が

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxb2-maven-plugin</artifactId> 
      <configuration> 
       <arguments> 
        <argument>-Xvisitor</argument> 
        <argument>-Xvisitor-package:com.massfords.humantask</argument> 
       </arguments> 
       <sources> 
        <source>${project.basedir}/src/main/resources/xsd/import_export_xml.xsd</source> 
        <source>${xsd}</source> 
       </sources> 
       <packageName>myPackage</packageName> 
       <outputDirectory>${jaxb.src}</outputDirectory> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>com.massfords</groupId> 
        <artifactId>jaxb-visitor</artifactId> 
        <version>2.0</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <id>xjc</id> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
あるとして生成されたソースフォルダは、ジェンキンスパスに追加されることをこのプラグインの実行の終わりです

jaxb生成フォルダにはクラスが1つしか含まれていません。私は実際にconfigであり、絶対にパスを解決しません。これはその設定を複製します。

+0

「生成されたすべてのクラスが重複している」とは分かりません。プラグインは、実行前にデフォルトで生成されたクラスを削除します([clearOutputDir](http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.2/xjc-mojo.html#clearOutputDir)を参照)。あなたが持っているエラーメッセージとPluginのPOM設定を投稿できますか? – Tunaki

答えて

2

jaxb2-maven-pluginが2.2と2.3(9月の16日にリリースされた)の間で動作する方法に違いがあります。実際、2.3で、我々はAbstractJaxbMojo次のコード

// 4) If the output directories exist, add them to the MavenProject's source directories 
    if(getOutputDirectory().exists() && getOutputDirectory().isDirectory()) { 

     final String canonicalPathToOutputDirectory = FileSystemUtilities.getCanonicalPath(getOutputDirectory()); 

     if(log.isDebugEnabled()) { 
      log.debug("Adding existing JAXB outputDirectory [" + canonicalPathToOutputDirectory 
        + "] to Maven's sources."); 
     } 

     // Add the output Directory. 
     getProject().addCompileSourceRoot(canonicalPathToOutputDirectory); 
    } 

残念ながら、同等のコードが結果として

getProject().addCompileSourceRoot(getOutputDirectory().getAbsolutePath()); 

である、XjcMojo#addGeneratedSourcesToProjectRoot()に存在しないを持って、絶対パスを一度添加され、そして後でカノニカルパスが追加されるため、バグです。

最善の解決策は、Mavenのversionプロパティを設定した、ことを考慮:

明らか
<version>2.2</version> 

a bug report for thatがあります。

関連する問題