4

我在 Eclipse 中有一个 Maven 多模块项目。

每次我想更新版本时,我都会去,将目标Run As -> Run Configurations...的参数更改为更高的数字,然后运行目标。newVersionversions:set

还有更直接的吗?

请注意,我不能使用 CI 友好版本,因为它们与 Maven 发布插件冲突。

4

3 回答 3

2

按照https://stackoverflow.com/a/34091470/927493的思路,

我将newVersion参数配置${string_prompt:newVersion}为如下图所示

Eclipse Maven 运行对话框

然后我会提示输入可以正常工作的版本号。

于 2020-04-17T09:51:34.220 回答
2

根据 JF Meijer 的回答,这是 M2E 的启动配置说明,我怀疑您已经安装了它,它完全符合您的要求。

启动创建对话框

  1. 打开“运行配置...”
  2. 选择“Maven 构建”
  3. 单击“新启动配置”(在左上角)
  4. 给它一个名字(比如“设置版本”)
  5. 点击“Workspace...”并选择父pom项目
  6. 在目标下输入“版本:设置”
  7. 向下滚动(可以隐藏)
  8. 在“参数”下选择右侧的添加...
  9. 添加参数
    • 姓名 =newVersion
    • 价值 =${string_prompt:"New Version":0.0.1-SNAPSHOT}

因此,为了扩展 JP Meijer 已经指出的内容,变量 string_prompt,如步骤 9 所示,支持不同的名称,如“新版本”和默认值,在本例中为 0.0.1-SNAPSHOT。

现在,应用、保存和运行!

于 2020-04-23T02:28:15.427 回答
1

这是一个检查 maven 构建系统是否需要更新的脚本。通过运行此脚本,您将获得所有更新(但不会应用任何更新)。这使您可以根据需要更改全部,部分或不更改。

mvn versions:display-plugin-updates
mvn versions:display-parent-updates
mvn versions:display-dependency-updates

我通常将此脚本保存在顶级check-versions.shcheck-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 默认父 pom.xml 中的默认值中)。您必须明确定义较新版本的默认值,以使它们停止报告。

另外,你会发现很多插件还是会报,因为不清楚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插件,您需要:

  1. 在 pom.xml 中定义更新策略(更新什么/不更新什么)。
  2. 在命令行上定义更新策略(更新什么/不更新什么)。

这些政策很冗长,因为它们涵盖了整个项目。是的,它们可以使用全局匹配,但它们仍然很冗长。对于我的个人项目,我注意到为了让它们给我适当的处理,我更新它们过于频繁,所以我将它们排除在外,而是在我处理check-updates脚本输出时决定更新或不更新什么.

这是因为自动更新插件和依赖项并不总是安全的。有时插件的下一个版本需要对项目进行代码更改。例如,从 Java 8 转移到 Java 9 的项目需要更改它们的构建和链接方式。如果您希望将代码绑定到未弃用的 API,则依赖项也是如此。

于 2020-04-16T13:13:34.430 回答