2015-02-09 161 views
2

我有一個多模塊項目,我試圖根據選擇的配置文件更改子項目中的構建依賴關係。在我的「dev」和「prod」配置文件中,我需要maven包含mysql庫,而在我的「本地」配置文件中,我需要maven包含h2庫。基於配置文件的Maven兒童依賴關係

父POM

<profile> 
    <id>local</id> 
    <properties> 
     <!-- Defines the environment variable --> 
      <build.env>local</build.env> 
    </properties> 
</profile> 
<profile> 
    <id>dev</id> 
    <properties> 
     <!-- Defines the environment variable --> 
     <build.env>dev</build.env> 
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
<profile> 
    <id>prod</id> 
    <properties> 
     <!-- Defines the environment variable --> 
      <build.env>production</build.env> 
    </properties> 
</profile> 

數據模塊POM

<!-- Local specific dependencies --> 
<profile> 
    <id>local</id> 
    <dependencies> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>${version.h2}</version> 
     </dependency> 
    </dependencies> 
    <activation> 
     <property> 
      <name>build.env</name> 
      <value>local</value> 
     </property> 
    </activation> 
</profile> 

<!-- Dev specific dependencies --> 
<profile> 
    <id>dev</id> 
    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>${version.mysql}</version> 
     </dependency> 
    </dependencies> 
    <activation> 
     <property> 
      <name>build.env</name> 
      <value>dev</value> 
     </property> 
    </activation> 
</profile> 

<!-- Production specific dependencies --> 
<profile> 
    <id>prod</id> 
    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>${version.mysql}</version> 
     </dependency> 
    </dependencies> 
    <activation> 
     <property> 
      <name>build.env</name> 
      <value>production</value> 
     </property> 
    </activation> 
</profile> 

的問題是,從根項目建設時,切換配置文件似乎不會影響孩子聚甲醛和依賴關係都包含在數據模塊jar文件(沒有配置文件繼承?)。如何觸發子配置文件以包含上面列出的依賴項?

回答

1

父POM:

<profile> 
    <id>local</id> 
    <properties> 
     <!-- Defines the environment variable --> 
     <build.env>local</build.env> 
     <!-- Define DB dependency type/version --> 
     <dbGroup>com.h2databse</dbGroup> 
     <dbArtifact>h2</dbArtifact> 
     <dbVersion>${version.h2}</dbVersion> 
    </properties> 
</profile> 
[...] 

模塊POM:

<dependency> 
    <groupId>${dbGroup}</groupId> 
    <artifactId>${dbArtifact}</artifactId> 
    <version>${dbVersion}</version> 
</dependency> 

你必須將你的version.h2/version.mysql定義你的父POM,但不應該是一個問題。

+0

謝謝,我今晚會嘗試這個,但我相信這會起作用。 – 2015-02-10 13:20:59