2015-10-14 57 views
2

我有一個多模塊項目,其中一些模塊有多個源目錄(一個用於手動創建代碼,另一個用於生成代碼)。Maven多源目錄模塊不工作

該項目的樣子:

Product 
+-- pom.xml 
+-- MagniCompCommon 
    +-- src/main/java 
    +-- src-gen 
    +-- pom.xml 

我使用構建輔助性Maven的插件添加在src根目錄下。但是,當我通過父MV中的「mvn clean install」進行編譯時,maven不會在src-gen中編譯任何內容,也不會在它嘗試編譯src/main/java文件時將其包含在類路徑中。由於src/main/java中的許多java代碼引用了src-gen代碼,所以編譯失敗。

這是家長的pom.xml:

<?xml version="1.0"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.magnicomp</groupId> 
    <artifactId>Product</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 


    <modules> 
    <module>MagniCompCommon</module> 
    <module>Model</module> 
    <module>Common</module> 
    <!-- <module>Agent</module> --> 
    <!-- <module>Doc</module> --> 
    </modules> 

    <properties> 
     <!-- MagniComp common --> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <hibernate.version>4.3.11.Final</hibernate.version> <!-- was 4.3.10.Final --> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

     <!-- Product specific --> 
     <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> --> 
     <jersey.glassfish.version>2.21</jersey.glassfish.version> 
     <javax.servlet.version>3.0</javax.servlet.version> 
     <bouncy.version>1.51</bouncy.version>  
    </properties> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>build-helper-maven-plugin</artifactId> 
        <version>1.7</version> 
        <executions> 
         <execution> 
         <id>add-source</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
          <source>src-gen</source> 
          </sources> 
         </configuration> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <!-- Use Java 8 (default is 5) --> 
        <configuration> 
         <source>1.8</source> 
         <target>1.8</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

我一直在使用${project.basedir}/src-gen<source>也試過但並沒有區別。

這裏是MagniCompCommon的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>com.magnicomp</groupId> 
     <artifactId>Product</artifactId> 
     <version>1.0</version> 
    </parent> 

    <artifactId>MagniCompCommon</artifactId> 
    <packaging>jar</packaging> 
.... snip ... 
+0

通過該工具在'SRC-gen'產生的那些東西? (XSD/REST/WSDL?) – khmarbaise

回答

0

父POM具有

<packaging>pom</packaging> 

這意味着該POM沒有一個正常的構建生命週期,有沒有代碼出現。

移動從父項目build-helper-maven-plugin描述的MagniCompCommon的POM,內build.pluginsbuild.pluginmanagement.plugins

編輯:另外,如果你沒有在你的src-gen到源控制檢查(和因爲它的產生,最好不要),使用target/generated-sources而不是再沒有build-helper-maven-plugin將是必要的。

+0

我真的試過了,它沒有任何效果。我將整個 ...內容從父pom.xml移到了MagniCompCommon pom.xml。我之前也曾嘗試在Parent pom.xml中保留maven-compiler-plugin部分,並將build-helper-maven-plugin移至MagniCompCommon pom.xml。這也沒有效果。 –

+0

你沒有*完全閱讀我的評論。你的問題源於你在'pluginManagement'內設置了插件描述,這表明插件的默認值,*如果該插件在構建中引用*,*在子項目*中引用。將它移到你的子項目中,在'plugins'標籤中。 –

+0

啊!你是對的。我錯過了。它現在很好用。非常感謝你! –

1

招兒:

<plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>build-helper-maven-plugin</artifactId> 
        <version>1.7</version> 
        <executions> 
         <execution> 
         <id>add-source</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
          <source>src-gen</source> 
          </sources> 
         </configuration> 
         </execution> 
        </executions> 
       </plugin> 
</plugins> 
  • 爲什麼要用pluginManagement =>只是和大家分享了同一插件的方式。
  • maven-compiler-plugin你可以把它放在pluginManagement不放其他插件。
0

這裏是MagniCompCommon的pom.xml的工作版本:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.9.1</version> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src-gen</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
0

創建多模塊Maven項目(和你的一樣),並添加下面的建立標籤孩子模塊MagniCompCommon pom.xml文件。工作得很好,我沒有編譯錯誤

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <includes> <include>src/main/java/**/*.java</include> <include>src-gen/**/*.java</include> </includes> </configuration> </plugin> </plugins> </build>