2014-03-04 48 views
0

我有两个不同的数据库配置文件的Maven模块。在不同的依赖关系的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> 

当运行行家安装用 “DB-本地主机MySQL的”,它包括在库目录中的 “MySQL的连接器的Java” jar文件。现在我使用“db-localhost-oracle”进行干净安装,它在lib目录中包含“mysql-connector-java”和“ojdbc6”jar。

我该如何做,如果我建立一个配置文件maven自动删除其他配置文件的罐子?

回答

2

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

mvn clean install将使db-localhost-mysql(因为它被标记为默认情况下被激活),它会添加mysql-connector-java。如果您运行mvn clean install -Pdb-localhost-mysql

mvn clean install -Pdb-localhost-oracle添加ojdbc6司机同样会发生。 mysql配置文件将不会启用(因为只有在没有配置文件明确有效时才触发)。

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

+0

我发现,如果我从db-localhost-mysql中删除activeByDefault比按预期工作。即当我使用db-localhost-oracle进行构建时,会删除mysql-connector-java jar。 –

+0

是不是这样,如果任何配置文件被标记为activeByDefault,即使我们选择任何其他配置文件,它仍然是活动的? –

+0

否。只有在启用** no **配置文件时才会激活_除非同一个POM中的另一个配置文件使用前述方法之一激活,否则此配置文件将自动对所有构建生效。默认情况下处于活动状态的所有配置文件都会在命令行中激活POM中的配置文件或激活配置时自动停用。请参阅[文档](http://maven.apache.org/guides/introduction/introduction -to-型材。html) –

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> 

但是请考虑做不同的是: