Java 不同依赖关系中的Maven配置文件

Java 不同依赖关系中的Maven配置文件,java,maven,profiles,Java,Maven,Profiles,我有一个带有两个不同数据库配置文件的Maven模块 <profile> <id>db-localhost-oracle</id> <dependencies> <dependency> <groupId>ojdbc6</groupId> <artifactId>ojdbc6&

我有一个带有两个不同数据库配置文件的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>

数据库本地主机oracle
ojdbc6
ojdbc6
oracle.jdbc.driver.OracleDriver
no.jbv.sergej.util.fixedracle10g
jdbc:oracle:thin:@//localhost:1521/xe
更新
数据库本地主机mysql
真的
mysql
mysql连接器java
com.mysql.jdbc.Driver
org.hibernate.dialogue.mysql5dialogue
jdbc:mysql://localhost/${mysql.schema}
更新
当使用“dblocalhost mysql”运行maven安装时,它在lib目录中包含“mysql connector java”jar文件。现在我使用“dblocalhost-oracle”进行了干净的安装,它在lib目录中包含了“mysql-connector-java”和“ojdbc6”jar


如果我使用一个配置文件构建,maven会自动删除其他配置文件的JAR,我该如何使它成为这样

您的问题与实际情况不符。您的个人资料定义对我来说是正确的:

mvn clean install
将启用
db localhost mysql
(默认情况下标记为激活),并将添加
mysql连接器java
。如果运行
mvn clean install-Pdb localhost mysql

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


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

我假设您使用maven dependency插件在目标目录之外的某个地方下载了下载的依赖关系(
${basedir}/lib

如果是这种情况,则需要在干净定义中包含lib dir(请参阅):


[...]
(如需进一步解释)
如果你想要不同的结果,请考虑。

我发现,如果我从db localhost mysql中默认删除activeByDefault,那么它会按预期工作。i、 e mysql连接器java jar在我使用db-localhost-oracle构建时被删除。是这样的吗,如果任何配置文件默认标记为activeByDefault,即使我们选择任何其他配置文件,该配置文件仍保持活动状态?否。只有在未启用任何配置文件时,该配置文件才处于活动状态。除非使用上述方法之一激活同一POM中的另一个配置文件,否则该配置文件将自动对所有版本处于活动状态。在命令行上或通过其激活配置激活POM中的配置文件时,默认情况下处于活动状态的所有配置文件将自动停用。请参见“是”这是真的,配置文件按预期激活。这没有任何问题,但问题是如果我在配置文件中使用activeByDefault,那么即使我使用其他配置文件来构建项目,该配置文件的依赖项jar也将始终被下载。为什么会这样?如何摆脱这个东西?我不需要额外的JAR。我只是将您的pom片段复制/粘贴到我的一个项目中,依赖项:列表不同。同样,您描述的不是概要文件如何与Maven一起工作。请阅读我的原始答案。我的最佳猜测是,此依赖项已经来自项目中的另一个依赖项,
mvn dependency:tree
(没有该概要文件)将帮助您跟踪它的来源。请尝试
mvn dependency:tree-Pdb localhost oracle
检查谁在拉mysql驱动程序。
<build>
  [...]
  <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <filesets>
        <fileset>
          <directory>lib</directory>
        </fileset>
      </filesets>
    </configuration>
  </plugin>
  [...]
</build>