gpt4 book ai didi

java - 如何在没有父 pom 的情况下从外部为我的 jar 设置版本,为依赖项生成可用的 pom.xml

转载 作者:行者123 更新时间:2023-12-02 05:36:42 25 4
gpt4 key购买 nike

如何在没有父 pom 的情况下在 pom.xml 中为 jar 项目外部定义版本标记?

我使用了properties-maven-plugin和flatten-maven-plugin来真正接近。部署的 pom.xml 具有不可用的版本,因为properties-maven-plugin使用值替换来设置版本。 flatten-maven-plugin 解决了依赖项版本的问题,但似乎没有解决主要工件的版本。该代码似乎确实正确地构建并命名了 jar。

我调查了https://maven.apache.org/maven-ci-friendly.html并了解了 ${revision},但那里的示例似乎包括父 pom。

我希望有人找到了不使用父 pom 的解决方案。如果没有解决方案,我想将此视为对其中一个插件的功能请求,但我想在提交此类请求之前先在这里尝试。

这是我可以提供的最简单的配置来演示我的问题。

pom.xml

<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>testgroup</groupId>
<artifactId>test</artifactId>
<version>${revision}</version>
<packaging>jar</packaging>

<name>test</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<lang>3.9</lang>
<revision>${major}.${minor}</revision>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${lang}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>pre</id>
<phase>pre-clean</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>test.properties</file>
</files>
</configuration>
</execution>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>test.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<flattenMode>defaults</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

测试.属性

major=1
minor=2

src/main/java/testgroup/test/App.java

package testgroup.test;

import org.apache.commons.lang3.StringUtils;

public class App
{
public static void main( String[] args )
{
System.out.println(StringUtils.chop("boo"));

}
}

生成的.flattened-pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>testgroup</groupId>
<artifactId>test</artifactId>
<version>${major}.${minor}</version>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

我希望 .flattened-pom.xml 中的版本为 1.2,而不是 ${major}.${minor}

所以,我不确定这是否是我做错了,或者是某个插件中存在某种错误。例如,即使 Maven 也会奇怪地显示:

C:\Users\Robert\eclipse-workspace\test>mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< testgroup:test >---------------------------
[INFO] Building test ${major}.${minor}
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- properties-maven-plugin:1.0.0:read-project-properties (pre) @ test ---

<截图>

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test ---
[INFO] Building jar: C:\Users\Robert\eclipse-workspace\test\target\test-1.2.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

最佳答案

我不知道您是否设法找到解决此问题的方法,但从我看来,您正确设置了 $revision版本元素的属性。

但是你会运行测试吗?为了构建/测试应用程序,您需要像这样运行它:

mvn clean flatten:flatten test

mvn clean flatten:flatten package

我发现有点不对劲的是你正在使用 $major$minor无需将它们在 pom.xml 中初始化为属性,也不使用属性。

我知道您想使用属性文件,我假设您以某种方式将其注入(inject)到测试环境中。相反,您可以使用属性 <major><minor>初始化它们,当你想改变它们时,你可以使用

mvn clean -Dmajor=1 -Dminor=3 flatten:flatten test

如果您找到其他方法来解决此问题,请与我们其他人分享:)

关于java - 如何在没有父 pom 的情况下从外部为我的 jar 设置版本,为依赖项生成可用的 pom.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com