我有一个带有两个不同数据库配置文件的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?
答案 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>
但是:请考虑采用不同的方式: