Maven Profile在不同的依赖关系中

时间:2014-03-04 08:47:59

标签: java maven profiles

我有一个带有两个不同数据库配置文件的Maven模块。

    <profile>
        <id>db-localhost-oracle</id>
        <dependencies>
            <dependency>
                <groupId>ojdbc6</groupId>
                <artifactId>ojdbc6</artifactId>
            </dependency>
        </dependencies>
        <properties>
            <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
            <db.dialect>no.jbv.sergej.util.FixedOracle10gDialect</db.dialect>
            <db.url>jdbc:oracle:thin:@//localhost:1521/xe</db.url>
            <db.hbm2ddl>update</db.hbm2ddl>
        </properties>
    </profile>

    <profile>
        <id>db-localhost-mysql</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
        <properties>
            <db.driver>com.mysql.jdbc.Driver</db.driver>
            <db.dialect>org.hibernate.dialect.MySQL5Dialect</db.dialect>
            <db.url>jdbc:mysql://localhost/${mysql.schema}</db.url>
            <db.hbm2ddl>update</db.hbm2ddl>
        </properties>
    </profile>

当运行maven install with“db-localhost-mysql”时,它包含lib目录中的“mysql-connector-java”jar文件。现在我用“db-localhost-oracle”清理安装,它在lib目录中包含“mysql-connector-java”和“ojdbc6”jar。

如果我使用一个配置文件构建maven,如何自动删除其他配置文件的jar?

2 个答案:

答案 0 :(得分:2)

你的问题与实际应该发生的事情不符。您的个人资料定义听起来对我来说是正确的:

mvn clean install将启用db-localhost-mysql(因为它被标记为默认激活),并且添加 mysql-connector-java。如果您运行mvn clean install -Pdb-localhost-mysql

,也会发生同样的情况

mvn clean install -Pdb-localhost-oracle 添加 ojdbc6驱动程序。将不启用mysql配置文件(因为只有在 未激活的配置文件时才会触发它。)

这并不意味着您当前的依赖关系层次结构还没有其中一个jar。它可能是一种传递依赖。要隔离这种情况并知道需要修复哪个项目,请运行mvn dependency:tree -Pdb-localhost-oracle以查看未启用mysql配置文件时的依赖关系层次结构。

答案 1 :(得分:0)

我假设您使用maven-dependency-plugin在目标目录(${basedir}/lib)之外的某个位置下载下载的依赖项。

如果是这种情况,您需要在清晰定义中包含您的lib目录(请参阅http://maven.apache.org/plugins/maven-clean-plugin/examples/delete_additional_files.html):

<build>
  [...]
  <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <filesets>
        <fileset>
          <directory>lib</directory>
        </fileset>
      </filesets>
    </configuration>
  </plugin>
  [...]
</build>

但是:请考虑采用不同的方式: