Maven 使用属性版本时的未解析引用



我有一个 maven 项目project A它依赖于不同的 maven 项目project B。我将Project B发布为两个 jar,一个包含常规类文件,另一个用于测试(我需要重用一些组件(。Maven为此提供了一个插件。

project Apom.xml如下所示:

<properties>
<project-B.version>abcd123</project-B.version>
</properties>
<dependencies>
<dependency>
<groupId>group-id-project-B</groupId>
<artifactId>project-B</artifactId>
<version>${project-B.version}</version>
</dependency>
<dependency>
<groupId>group-id-project-B</groupId>
<artifactId>project-B</artifactId>
<classifier>tests</classifier>
<type>test-jar</type>
<version>${project-B.version}</version> <!--  Doesn't work!   -->
<scope>test</scope>
</dependency>
</dependencies>

不知何故,我的IDE(IntelliJ(和mvnCLI都无法编译它,并且都在我的测试类中给出了unresolved reference(我在其中重用project B的测试文件(。

但是,如果我在test-jar依赖项中用abcd123替换${project-B.version},则一切正常。我无法理解为什么mvn不喜欢我在properties中使用变量?此行为在我的 IDE 和 mvn cli 之间是一致的。

值得一提的是,这是我使用mvn dependency:listproject B的输出

group-id-project-B:project-B:test-jar:tests:abcd123:test
group-id-project-B:project-B:jar:tests:abcd123:compile

我的其余pom

<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>

</plugins>
</build>

Maven 中是否存在错误或我遗漏了什么?

编辑: 我使用mvn clean install,截断的输出是:

[INFO] --- kotlin-maven-plugin:1.3.72:test-compile (test-compile) @ optimization-engine-service ---
[ERROR] MyClass.kt: (16, 19) Unresolved reference: functionName
[ERROR] MyClass.kt: (19, 28) Unresolved reference: SOME_FIELD
... etc.

Maven 无法解析使用版本 from 参数安装/部署的项目。

为了使您的工件在构建后可解析,您必须使用扁平化-maven-plugin,以便获得一个可由maven解析的有效pom。

您可以看到有关如何在 maven-ci-友好的中执行此操作的示例

最新更新