2017-01-20 19 views
1

我正在嘗試創建一個支持兩種不同環境的相同代碼的Maven配置。一個環境是使用Seam的Java 6,另一個是使用JEE的Java 7。如何正確使用Maven中的配置文件,分類器和模塊?

我的項目是一個多模塊項目與父pom我配置了兩個配置文件。在父POM中有趣的部分:

<profiles> 
    <profile> 
     <id>JDK7</id> 
     <properties> 
      <jdk.version>1.7</jdk.version> 
      <profile.classifier>with-beans-xml</profile.classifier> 
     </properties> 

     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.3</version> 
        <configuration> 
         <source>${jdk.version}</source> 
         <target>${jdk.version}</target> 
         <encoding>${project.build.sourceEncoding}</encoding> 
        </configuration> 
       </plugin> 

       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <version>2.4</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
          <configuration> 
           <classifier>${profile.classifier}</classifier> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build>  
    </profile> 

    <profile> 
     <id>JDK6</id> 
     <properties> 
      <jdk.version>1.6</jdk.version> 
      <profile.classifier>without-beans-xml</profile.classifier> 
     </properties> 

     <!-- Identical parts left out for brevity --> 

     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
          <configuration> 
           <classifier>${profile.classifier}</classifier> 
           <excludes> 
            <exclude>src/main/resources/META-INF/beans.xml</exclude> 
           </excludes> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build>  
    </profile> 
</profiles> 

在此POM的一個子模塊,我需要引用其他模塊的特定版本,以確保它們都使用Java的同一內部版本,並應包含或不包含beans.xml中。

這是我如何做到了這一點:

<parent> 
    <groupId>commons</groupId> 
    <artifactId>parent-pom</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 
<artifactId>some-module</artifactId> 

<dependencies> 
    <dependency> 
     <groupId>commons</groupId> 
     <artifactId>core</artifactId> 
     <version>${project.version}</version> 
     <classifier>${profile.classifier}</classifier> 
    </dependency> 
</dependencies> 

上述特性decalared解決就好了,但是上面叫core的依賴包含對包含整個項目的核心功能的模塊的引用。

當我將該模塊導入其他模塊時,core中的依存關係不能解決。

這是依賴層次我期待:

- some-module 
    - core 
     - some-other-module 

然而,增加核心作爲一個依賴於另一個模塊後,我明確地需要添加some-other-module它可爲過,即some-other-module不由參考core傳遞。

我該怎麼做呢?它適用於不同的版本,只是我必須明確地添加它們,當其他用戶要使用它時,我寧願避免混淆。

更新

按要求,這裏是充滿父POM和正在經歷的傳遞性依賴問題的一個模塊。

父pom.xml的

<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> 
    <groupId>se.commons</groupId> 
    <artifactId>healthcheck-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>healthcheck-parent-pom</name> 

    <modules> 
     <module>healthcheck-core</module> 
     <module>healthcheck-xsd</module> 
     <module>healthcheck-jms</module> 
     <module>healthcheck-db</module> 
     <module>healthcheck-filesystem</module> 
     <module>healthcheck-http</module> 
    </modules> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.home>${JAVA_1_7_HOME}</java.home> 
    </properties> 

    <profiles> 
     <profile> 
      <id>JDK7</id> 
      <!-- <activation> --> 
      <!-- <activeByDefault>true</activeByDefault> --> 
      <!-- </activation> --> 
      <properties> 
       <!-- Build properties --> 
       <jdk.version>1.7</jdk.version> 
       <profile.classifier>with-beans-xml</profile.classifier> 

       <bom.version>2.0.0.R</bom.version> 
      </properties> 

      <dependencyManagement> 
       <dependencies> 
        <dependency> 
         <groupId>se.commons</groupId> 
         <artifactId>bom</artifactId> 
         <version>${bom.version}</version> 
         <scope>import</scope> 
         <type>pom</type> 
        </dependency> 
       </dependencies> 
      </dependencyManagement> 

      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>3.3</version> 
         <configuration> 
          <source>${jdk.version}</source> 
          <target>${jdk.version}</target> 
          <encoding>${project.build.sourceEncoding}</encoding> 
         </configuration> 
        </plugin> 

        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <version>2.4</version> 
         <executions> 
          <execution> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>${profile.classifier}</classifier> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>findbugs-maven-plugin</artifactId> 
         <version>3.0.1</version> 
         <configuration> 
          <effort>Default</effort> 
          <threshold>Default</threshold> 
          <xmlOutputDirectory>target/findbugs</xmlOutputDirectory> 
          <failOnError>true</failOnError> 
          <xmlOutput>true</xmlOutput> 
          <findbugsXmlOutput>true</findbugsXmlOutput> 
          <findbugsXmlWithMessages>true</findbugsXmlWithMessages> 
          <targetJdk>${jdk.version}</targetJdk> 
          <configuration> 
           <omitVisitors>FindReturnRef</omitVisitors> 
          </configuration> 
         </configuration> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <version>2.18.1</version> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-checkstyle-plugin</artifactId> 
         <version>2.15</version> 
         <executions> 
          <execution> 
           <goals> 
            <goal>checkstyle</goal> 
           </goals> 
           <phase>compile</phase> 
          </execution> 
         </executions> 
         <configuration> 
          <configLocation>${basedir}/../src/site/checkstyle.xml</configLocation> 
         </configuration> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-source-plugin</artifactId> 
         <version>2.2.1</version> 
         <executions> 
          <execution> 
           <id>attach-sources</id> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-javadoc-plugin</artifactId> 
         <version>2.8</version> 
         <executions> 
          <execution> 
           <id>attach-javadocs</id> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-site-plugin</artifactId> 
         <version>3.3</version> 
         <dependencies> 
          <dependency> 
           <!-- add support for ssh/scp --> 
           <groupId>org.apache.maven.wagon</groupId> 
           <artifactId>wagon-ssh</artifactId> 
           <version>2.4</version> 
          </dependency> 
         </dependencies> 
         <configuration> 
          <locales>sv</locales> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 


     <profile> 
      <id>JDK6</id> 
      <properties> 
       <!-- Build properties --> 
       <jdk.version>1.6</jdk.version> 
       <profile.classifier>without-beans-xml</profile.classifier> 

       <bom.version>2.0.0.R</bom.version> 
      </properties> 

      <dependencyManagement> 
       <dependencies> 
        <dependency> 
         <groupId>se.commons</groupId> 
         <artifactId>bom</artifactId> 
         <version>${bom.version}</version> 
         <scope>import</scope> 
         <type>pom</type> 
        </dependency> 
       </dependencies> 
      </dependencyManagement> 

      <build> 
       <resources> 
        <resource> 
         <directory>src/main/resources/META-INF</directory> 
         <excludes> 
          <exclude>beans.xml</exclude> 
         </excludes> 
        </resource> 
       </resources> 

       <plugins> 
        <plugin> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>3.3</version> 
         <configuration> 
          <source>${jdk.version}</source> 
          <target>${jdk.version}</target> 
          <encoding>${project.build.sourceEncoding}</encoding> 
         </configuration> 
        </plugin> 

        <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <executions> 
          <execution> 
           <phase>package</phase> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
           <configuration> 
            <classifier>${profile.classifier}</classifier> 
            <excludes> 
             <exclude>src/main/resources/META-INF/beans.xml</exclude> 
            </excludes> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>findbugs-maven-plugin</artifactId> 
         <version>3.0.1</version> 
         <configuration> 
          <effort>Default</effort> 
          <threshold>Default</threshold> 
          <xmlOutputDirectory>target/findbugs</xmlOutputDirectory> 
          <failOnError>true</failOnError> 
          <xmlOutput>true</xmlOutput> 
          <findbugsXmlOutput>true</findbugsXmlOutput> 
          <findbugsXmlWithMessages>true</findbugsXmlWithMessages> 
          <targetJdk>${jdk.version}</targetJdk> 
          <configuration> 
           <omitVisitors>FindReturnRef</omitVisitors> 
          </configuration> 
         </configuration> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <version>2.18.1</version> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-checkstyle-plugin</artifactId> 
         <version>2.15</version> 
         <executions> 
          <execution> 
           <goals> 
            <goal>checkstyle</goal> 
           </goals> 
           <phase>compile</phase> 
          </execution> 
         </executions> 
         <configuration> 
          <configLocation>${basedir}/../src/site/checkstyle.xml</configLocation> 
         </configuration> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-source-plugin</artifactId> 
         <version>2.2.1</version> 
         <executions> 
          <execution> 
           <id>attach-sources</id> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-javadoc-plugin</artifactId> 
         <version>2.8</version> 
         <executions> 
          <execution> 
           <id>attach-javadocs</id> 
           <goals> 
            <goal>jar</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 

        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-site-plugin</artifactId> 
         <version>3.3</version> 
         <dependencies> 
          <dependency><!-- add support for ssh/scp --> 
           <groupId>org.apache.maven.wagon</groupId> 
           <artifactId>wagon-ssh</artifactId> 
           <version>2.4</version> 
          </dependency> 
         </dependencies> 
         <configuration> 
          <locales>sv</locales> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 


    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-project-info-reports-plugin</artifactId> 
       <version>2.4</version> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-report-plugin</artifactId> 
       <version>2.18.1</version> 
      </plugin> 

      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <version>3.0.1</version> 
       <configuration> 
        <effort>Default</effort> 
        <threshold>Default</threshold> 
        <xmlOutputDirectory>target/findbugs</xmlOutputDirectory> 
        <failOnError>true</failOnError> 
        <xmlOutput>true</xmlOutput> 
        <findbugsXmlOutput>true</findbugsXmlOutput> 
        <findbugsXmlWithMessages>true</findbugsXmlWithMessages> 
        <targetJdk>${jdk.version}</targetJdk> 
        <configuration> 
         <omitVisitors>FindReturnRef</omitVisitors> 
        </configuration> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-pmd-plugin</artifactId> 
       <version>3.4</version> 
       <configuration> 
        <targetJdk>${jdk.version}</targetJdk> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>cobertura-maven-plugin</artifactId> 
       <version>2.7</version> 
       <reportSets> 
        <reportSet> 
         <reports> 
          <report>cobertura</report> 
         </reports> 
        </reportSet> 
       </reportSets> 
       <configuration> 
        <instrumentation> 
        </instrumentation> 
        <formats> 
         <format>xml</format> 
         <format>html</format> 
        </formats> 
        <instrumentation> 
         <includes> 
          <include>**/*.class</include> 
         </includes> 
        </instrumentation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-javadoc-plugin</artifactId> 
       <version>2.8</version> 
      </plugin> 
     </plugins> 
    </reporting> 
</project> 

這裏是使用核心作爲一個依賴的一個模塊:

<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>se.commons</groupId> 
     <artifactId>healthcheck-parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <artifactId>healthcheck-jms</artifactId> 

    <dependencies> 
     <dependency> 
      <groupId>se.commons</groupId> 
      <artifactId>healthcheck-core</artifactId> 
      <version>${project.version}</version> 
      <classifier>${profile.classifier}</classifier> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.spec.javax.ejb</groupId> 
      <artifactId>jboss-ejb-api_3.1_spec</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.spec.javax.jms</groupId> 
      <artifactId>jboss-jms-api_1.1_spec</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

最後,這裏是核心的POM:

<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>se.commons</groupId> 
     <artifactId>healthcheck-parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <artifactId>healthcheck-core</artifactId> 

    <dependencies> 
     <dependency> 
      <groupId>se.commons</groupId> 
      <artifactId>healthcheck-xsd</artifactId> 
      <version>${project.version}</version> 
      <classifier>${profile.classifier}</classifier> 
     </dependency> 

     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 
</project> 
+0

確實依賴''healthcheck-xsd'確實存在的分類器'without-beans-xml'和'with-beans-xml'? – JimHawkins

+0

@JimHawkins我檢查了我的本地存儲庫,它包含xsd,'without-beans-xml'和'with-beans-xml'兩個版本。我也通過jenkins構建並驗證了我們的存儲庫管理器可以處理它,並且GAV也看起來正確,分類器和所有。 – hochas

+0

對不起,我忍不住。希望其他人可以... – JimHawkins

回答

0

我發現類似的問題後,終於放棄了上述解決方案,從未得到明確的答案。

似乎不可能使用分類器來解析傳遞依賴性,只有標準的GAV。

我決定採用不同的artifactId來區分項目。

相關問題