在 Eclipse 中更新多模块项目版本的便捷方法
Convenient way to update version of multi-module project in Eclipse
我在 Eclipse 中有一个 Maven 多模块项目。
每次要更新版本,我都去Run As -> Run Configurations...
,把目标versions:set
的参数newVersion
改大一点,然后运行目标。
还有更直接的吗?
请注意,我无法使用 CI 友好版本,因为它们与 Maven 发布插件冲突。
这是一个脚本,用于检查 Maven 构建系统是否需要更新。通过 运行 运行此脚本,您将获得所有更新(但将应用其中的 none )。这使您可以根据需要更改全部、部分或 none。
mvn versions:display-plugin-updates
mvn versions:display-parent-updates
mvn versions:display-dependency-updates
我通常将此脚本保存在顶级 check-versions.sh
或 check-versions.cmd
中(针对脚本语言进行调整)。
要使此脚本正常工作,在 /project/build/plugins
中,您需要 org.codehaus.mojo:versions-maven-plugin:2.7
或更高版本。我通常像这样配置插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
因为这不会备份 pom.xml 污染我的 git
历史的文件。
前几次你运行这个,你可能会注意到继承的插件显示自己已经过时(因为它们实际上内置于maven默认父[=54中的默认值=]).您必须明确定义较新版本的默认值才能让它们停止报告。
另外,你会发现很多插件还是会报错,因为不清楚Java的最低要求版本是多少,Apache Maven的最低要求版本是多少。要将这些要求编码到 pom.xml 中,您将使用 Maven Enforcer 插件。我的一个强制 Maven 版本 3.5.4 和 Java 版本 11 的例子是
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.5.4</version>
</requireMavenVersion>
<requireJavaVersion>
<version>11</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
有了这些工具,我目前在我的一个项目中得到了输出
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-plugin-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.github.sevntu-checkstyle:dsm-maven-plugin: checking for updates from central
[INFO] artifact net.nicoulaj.maven.plugins:checksum-maven-plugin: checking for updates from central
[INFO]
[INFO] The following plugin updates are available:
[INFO] maven-project-info-reports-plugin .................... 2.6 -> 3.0.0
[INFO]
[INFO] All plugins have a version specified.
[INFO]
[INFO] Project inherits minimum Maven version as: 3.5.4
[INFO] Plugins require minimum Maven version of: 3.2.1
[INFO]
[INFO] No plugins require a newer version of Maven than specified by the pom.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.976 s
[INFO] Finished at: 2020-04-16T07:52:12-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-parent-updates (default-cli) @ pascal-adapter ---
[INFO] Project does not have a parent.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.325 s
[INFO] Finished at: 2020-04-16T07:52:15-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-dependency-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.edwbuck.parserhelp:pascal_client: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-engine: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-api: checking for updates from central
[INFO] artifact org.influxdb:influxdb-java: checking for updates from central
[INFO] The following dependencies in Dependencies have newer versions:
[INFO] org.junit.jupiter:junit-jupiter-api ................... 5.6.0 -> 5.6.2
[INFO] org.junit.jupiter:junit-jupiter-engine ................ 5.6.0 -> 5.6.2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.848 s
[INFO] Finished at: 2020-04-16T07:52:18-05:00
[INFO] ------------------------------------------------------------------------
这表明我需要更新我的 maven-project-info-reports-plugin
和我的 org.junit.jupiter:junit-jupiter-api
和 org.junit.jupiter:junit-jupiter-engine
插件。
通常我不使用 maven 版本插件在 pom.xml 文件中实际进行更新,因为文本编辑器速度很快,如果你在 pom.xml一次。
目前 codehaus 提供的 maven 版本插件没有命令行选项可以一次自动更新多个版本。它不存在的原因很简单。要使用 versions:update-properties
插件,需要:
- 在 pom.xml.
中定义更新策略(更新什么/不更新什么)
- 在命令行定义更新策略(更新什么/不更新什么)。
这些政策很冗长,因为它们涵盖了整个项目。是的,他们可以使用 glob 匹配,但他们仍然很冗长。对于我的个人项目,我注意到为了让他们给我适当的处理,我更新它们的频率太高,所以我将它们排除在外,而不是在我处理 check-updates
脚本。
那是因为自动更新插件和依赖项并不总是安全的。有时,下一版本的插件需要对项目进行代码更改。例如,从 Java 8 转移到 Java 9 的项目需要更改它们的构建和链接方式。如果您想将代码绑定到未弃用的 API,则依赖项也是如此。
遵循的想法,
我将 newVersion
参数配置为 ${string_prompt:newVersion}
如下图所示
然后系统提示我输入可以正常工作的版本号。
根据 JF Meijer 的回答,这是 M2E 的启动配置说明,我怀疑您已经安装了它,它完全符合您的要求。
Launch Create Dialog
- 打开"Run Configurations..."
- Select "Maven Build"
- 单击 "New Launch Configuration"(在左上角)
- 给它起个名字(喜欢"Set Version")
- 单击 "Workspace..." 和 select 父 pom 项目
- 在目标下输入 "versions:set"
- 向下滚动(可以隐藏)
- 下"Parameters"select右边加...
- 添加一个参数
- 姓名=
newVersion
- 值 =
${string_prompt:"New Version":0.0.1-SNAPSHOT}
因此,为了扩展 JP Meijer 已经指出的内容,变量 string_prompt,如第 9 步所示,支持不同的名称,如 "New Version",以及默认值,在此案例 0.0.1-SNAPSHOT.
现在,应用、保存,然后 运行!
我在 Eclipse 中有一个 Maven 多模块项目。
每次要更新版本,我都去Run As -> Run Configurations...
,把目标versions:set
的参数newVersion
改大一点,然后运行目标。
还有更直接的吗?
请注意,我无法使用 CI 友好版本,因为它们与 Maven 发布插件冲突。
这是一个脚本,用于检查 Maven 构建系统是否需要更新。通过 运行 运行此脚本,您将获得所有更新(但将应用其中的 none )。这使您可以根据需要更改全部、部分或 none。
mvn versions:display-plugin-updates
mvn versions:display-parent-updates
mvn versions:display-dependency-updates
我通常将此脚本保存在顶级 check-versions.sh
或 check-versions.cmd
中(针对脚本语言进行调整)。
要使此脚本正常工作,在 /project/build/plugins
中,您需要 org.codehaus.mojo:versions-maven-plugin:2.7
或更高版本。我通常像这样配置插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
因为这不会备份 pom.xml 污染我的 git
历史的文件。
前几次你运行这个,你可能会注意到继承的插件显示自己已经过时(因为它们实际上内置于maven默认父[=54中的默认值=]).您必须明确定义较新版本的默认值才能让它们停止报告。
另外,你会发现很多插件还是会报错,因为不清楚Java的最低要求版本是多少,Apache Maven的最低要求版本是多少。要将这些要求编码到 pom.xml 中,您将使用 Maven Enforcer 插件。我的一个强制 Maven 版本 3.5.4 和 Java 版本 11 的例子是
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.5.4</version>
</requireMavenVersion>
<requireJavaVersion>
<version>11</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
有了这些工具,我目前在我的一个项目中得到了输出
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-plugin-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.github.sevntu-checkstyle:dsm-maven-plugin: checking for updates from central
[INFO] artifact net.nicoulaj.maven.plugins:checksum-maven-plugin: checking for updates from central
[INFO]
[INFO] The following plugin updates are available:
[INFO] maven-project-info-reports-plugin .................... 2.6 -> 3.0.0
[INFO]
[INFO] All plugins have a version specified.
[INFO]
[INFO] Project inherits minimum Maven version as: 3.5.4
[INFO] Plugins require minimum Maven version of: 3.2.1
[INFO]
[INFO] No plugins require a newer version of Maven than specified by the pom.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.976 s
[INFO] Finished at: 2020-04-16T07:52:12-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-parent-updates (default-cli) @ pascal-adapter ---
[INFO] Project does not have a parent.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.325 s
[INFO] Finished at: 2020-04-16T07:52:15-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-dependency-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.edwbuck.parserhelp:pascal_client: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-engine: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-api: checking for updates from central
[INFO] artifact org.influxdb:influxdb-java: checking for updates from central
[INFO] The following dependencies in Dependencies have newer versions:
[INFO] org.junit.jupiter:junit-jupiter-api ................... 5.6.0 -> 5.6.2
[INFO] org.junit.jupiter:junit-jupiter-engine ................ 5.6.0 -> 5.6.2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.848 s
[INFO] Finished at: 2020-04-16T07:52:18-05:00
[INFO] ------------------------------------------------------------------------
这表明我需要更新我的 maven-project-info-reports-plugin
和我的 org.junit.jupiter:junit-jupiter-api
和 org.junit.jupiter:junit-jupiter-engine
插件。
通常我不使用 maven 版本插件在 pom.xml 文件中实际进行更新,因为文本编辑器速度很快,如果你在 pom.xml一次。
目前 codehaus 提供的 maven 版本插件没有命令行选项可以一次自动更新多个版本。它不存在的原因很简单。要使用 versions:update-properties
插件,需要:
- 在 pom.xml. 中定义更新策略(更新什么/不更新什么)
- 在命令行定义更新策略(更新什么/不更新什么)。
这些政策很冗长,因为它们涵盖了整个项目。是的,他们可以使用 glob 匹配,但他们仍然很冗长。对于我的个人项目,我注意到为了让他们给我适当的处理,我更新它们的频率太高,所以我将它们排除在外,而不是在我处理 check-updates
脚本。
那是因为自动更新插件和依赖项并不总是安全的。有时,下一版本的插件需要对项目进行代码更改。例如,从 Java 8 转移到 Java 9 的项目需要更改它们的构建和链接方式。如果您想将代码绑定到未弃用的 API,则依赖项也是如此。
遵循
我将 newVersion
参数配置为 ${string_prompt:newVersion}
如下图所示
然后系统提示我输入可以正常工作的版本号。
根据 JF Meijer 的回答,这是 M2E 的启动配置说明,我怀疑您已经安装了它,它完全符合您的要求。
Launch Create Dialog
- 打开"Run Configurations..."
- Select "Maven Build"
- 单击 "New Launch Configuration"(在左上角)
- 给它起个名字(喜欢"Set Version")
- 单击 "Workspace..." 和 select 父 pom 项目
- 在目标下输入 "versions:set"
- 向下滚动(可以隐藏)
- 下"Parameters"select右边加...
- 添加一个参数
- 姓名=
newVersion
- 值 =
${string_prompt:"New Version":0.0.1-SNAPSHOT}
- 姓名=
因此,为了扩展 JP Meijer 已经指出的内容,变量 string_prompt,如第 9 步所示,支持不同的名称,如 "New Version",以及默认值,在此案例 0.0.1-SNAPSHOT.
现在,应用、保存,然后 运行!