【问题标题】:Maven: Build only one module out of multi-module projectMaven:从多模块项目中只构建一个模块
【发布时间】:2014-03-03 15:13:54
【问题描述】:

我有一个多模块 Maven 项目,我只想发布一个更新模块而不是整个项目。这是由于一些特定要求,其中不需要发布整个项目 - 只有库的一个子集需要修复,因此需要发布。

但是,当我运行 mvn release:prepare 时,我收到以下错误 Non-resolvable parent POM - 我已经在模块项目中使用 relativePath 标签设置了父 POM 关系,但这似乎不起作用。

是否可以只发布一个模块而不发布整个项目。

提前致谢。

编辑

家长会

<groupId>com.domain</groupId>
<artifactId>project-parent</artifactId>
<version>0.5.1-SNAPSHOT</version>

<packaging>pom</packaging>

<modules>
    <module>library1</module>
    <module>library2</module>
    <module>library3</module>
</modules>

模块POM如下:

<parent>
    <groupId>com.domain></groupId>
    <artifactId>project-parent</artifactId>
    <version>0.5.1-SNAPSHOT</version>
</parent>

<artifactId>library1</artifactId>

现在我只想发布新版本的 library1 而不是其他的

【问题讨论】:

  • 您能否提供描述项目关系和结构的 pom 文件片段?
  • @user902383 添加了 POM 片段 - 在此先感谢
  • 这让我有点困惑。显然,您有三个单独管理的库,具有单独的发布和部署轨迹,所以我不明白为什么将它们定义为三个模块,就好像它们必须打包成一个整体一样。
  • 这不是 3 个不同的库,而是 uber 库的模块。随着时间的推移,大约 150 多个其他项目依赖它。有一个关键的修复需要推送,并不是所有的项目都准备好在他们定义可变参数版本的地方使用它。因此需要具体的发布

标签: java maven build


【解决方案1】:

尝试使用 the -pl &lt;project name&gt; switch 从父项目/目录运行 maven 命令。

【讨论】:

  • 不起作用。 mvn clean package install 所有目标都有效,但 release:prepare 失败。
  • 使用 artifactId 代替带有 pl 开关的项目名称
【解决方案2】:

我认为 maven 试图告诉您您定义的父级未发布/稳定。在你的 pom 中,父版本是“0.5.1-SNAPSHOT”,如果你想发布单个库模块,它不能/不应该工作,因为它会指向一些没有唯一定义的东西。有没有可以替代的稳定版本?否则,-am 开关可能与 -pl 结合使用?

编辑

我刚刚用 maven 3.2 尝试过这个,它确实询问我应该将父级设置/解析到哪个版本。正如我之前所说,您需要稳定的版本号才能使该版本正常工作

mvn release:prepare -pl library1
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building library1 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ library1 ---
[INFO] Verifying that there are no local modifications...
[INFO]   ignoring changes on: **\release.properties, **\pom.xml.next, **\pom.xml.releaseBackup,     **\pom.xml.backup, **\pom.xml.branch, **\pom.xml.tag [INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\temp\mavenTest\library1
[INFO] Checking dependencies and plugins for snapshots ...
There are still some remaining snapshot dependencies.
: Do you want to resolve them now? (yes/no) no: : yes
Dependency type to resolve,: specify the selection number ( 0:All 1:Project Dependencies 2:Plugins 3:Reports 4:Extensions ): (0/1/2/3) 1: : 1
Dependency 'testme:parent' is a snapshot (1.1-SNAPSHOT)
: Which release version should it be set to? 1.1: :

【讨论】:

    【解决方案3】:
    mvn -pl .,library1 clean install
    

    “。”将构建你的父 pom.xml 并且“library1”是你给它的模块名称。

    如果不想构建父pom.xml,也可以这样做:

    mvn -pl library1 clean install
    

    或者在你的情况下,也许:

    mvn -pl library1 deploy
    

    我使用“部署”是因为“发布”不是 Maven 构建生命周期阶段。

    【讨论】:

    • -pl 是什么意思
    • -pl 代表“项目”。它允许您指定要构建的模块。
    【解决方案4】:

    诀窍是:

    1. 在附加的 -Darguments 参数中重复 -pl 参数,将 -pl 参数传递给 Child-Maven-Processes
    2. 神秘的 mavenExecutor,能够使用给定的 -pl 参数创建 Child-Maven-Processes

    这应该可行:

    mvn -pl library1 -DmavenExecutorId=forked-path -Darguments="-pl library1" 
    

    【讨论】:

    • 对我来说,arguments 参数的工作方式不同:mvn -pl library1 -DmavenExecutorId=forked-path "-Darguments=-pl library1" 注意引号的不同位置。
    • 谢谢!添加-DmavenExecutorId=forked-path 是我需要避免从发布中收到错误:prepare child maven: Failed to re-parse additional arguments for Maven invocation. Unrecognized option: -pl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2021-03-23
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多