微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多模块项目中覆盖配置文件中的属性在 Maven 中无法正常工作

如何解决在多模块项目中覆盖配置文件中的属性在 Maven 中无法正常工作

Pom A 是 Pom B 和 Pom C 的父项。

Pom A 有一个配置文件 sample-profile,它覆盖了在 Pom A 中定义的属性

认值为 2.11sample-profile 中为该属性定义的值为 2.12。

在 Pom A 的依赖管理部分,一个依赖的 artifactId 依赖于 的值。

                <dependency>
                    <groupId>com.github.scopt</groupId>
                    <artifactId>scopt_${scala.version}</artifactId>
                    <version>3.7.0</version>
                </dependency>

项目 C 依赖于 scopt_${scala.version}。项目 B 依赖项目 C。

期望的行为是:

  • 运行 mvn clean install -DskipTests -Psample-profile获取依赖于 scopt_2.12 的项目 C。

实际行为是:

当我在项目 B 的目录中运行 mvn clean install -DskipTests -Psample-profilemvn dependency:tree -Psample-profile 时,项目 C 的 artifactId 是 scopt_2.11 而不是 scopt_2.12

mvn help:effective-pom -Psample-profile 虽然没有产生 scopt_2.11 的痕迹。

我该如何解决这个问题?

[编辑] - 最初,我使用示例配置文件从 Pom A 构建所有内容(当我这样做时,我具有所需的行为,即具有 scopt_2.12 作为对项目 C)。然后在对项目 B 进行代码修改后,我只需要从 Pom B 构建(使用相同的示例配置文件)。这就是我出现意外行为的时候(即,将 scopt_2.11 作为项目 C 的依赖项)。

解决方法

我不确定真正的原因,但 maven 可能会在解析配置文件之前尝试解析依赖项。特别是因为它们可能会影响插件,而插件可能会扩展 maven(参见 maven extensions)。

你可以试试这个:

  • 在您的 dependencyManagement 中声明这两个版本,没有任何配置文件。
  • 在子项目 (B) 中,使用 <artifactId>scopt_${scala.version}</artifactId> 作为 artifactId。

这可能有效。

,

以下对我有用,为了方便使用 Junit jar。

父 pom 是:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.essexboy</groupId>
    <artifactId>parent-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>
    <name>parent-demo</name>

    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.11</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>
        </profile>
        <profile>
            <id>profile1</id>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.13.2</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>
        </profile>
    </profiles>

    <modules>
        <module>mod-b</module>
        <module>mod-c</module>
    </modules>


</project>

项目 C 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>parent-demo</artifactId>
    <groupId>com.essexboy</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>mod-c</artifactId>

  <name>mod-a</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

</project>

项目 B 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>parent-demo</artifactId>
        <groupId>com.essexboy</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>mod-b</artifactId>

    <name>mod-a</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.essexboy</groupId>
            <artifactId>mod-c</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

</project>

greg.clinker@lldevuk-gclinke:~/work/parent-demo/mod-b$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.essexboy:mod-b >-------------------------
[INFO] Building mod-a 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ mod-b ---
[INFO] com.essexboy:mod-b:jar:1.0-SNAPSHOT
[INFO] \- com.essexboy:mod-c:jar:1.0-SNAPSHOT:compile
[INFO]    \- junit:junit:jar:4.11:compile
[INFO]       \- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.774 s
[INFO] Finished at: 2021-05-27T09:47:47+01:00
[INFO] ------------------------------------------------------------------------



greg.clinker@lldevuk-gclinke:~/work/parent-demo/mod-b$ mvn dependency:tree -Pprofile1
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.essexboy:mod-b >-------------------------
[INFO] Building mod-a 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ mod-b ---
[INFO] com.essexboy:mod-b:jar:1.0-SNAPSHOT
[INFO] \- com.essexboy:mod-c:jar:1.0-SNAPSHOT:compile
[INFO]    \- junit:junit:jar:4.13.2:compile
[INFO]       \- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.620 s
[INFO] Finished at: 2021-05-27T09:47:51+01:00
[INFO] ------------------------------------------------------------------------

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。