如何在 maven release:prepare 中跳过模块

How to skip modules in maven release:prepare

我想使用Maven发布插件来发布我的Eclipse插件,但是在release:prepare这一步,我不得不跳过更新一些插件的版本号。这是因为它们是其他第 3 方插件所依赖的插件的修改版本。

我尝试过的是将版本明确地设置为现有版本:

mvn release:prepare -DreleaseVersion=1.1.99 -Dproject.rel.org.eclipse.linuxtools.docker.core:org.eclipse.linuxtools.docker.core=4.1.0 -Dproject.dev.org.eclipse.linuxtools.docker.core:org.eclipse.linuxtools.docker.core=4.1.0-SNAPSHOT

这对我不起作用,发布插件仍然尝试更改版本。

接下来我尝试将插件分离到配置文件中,并且只为我想要更改的插件调用 release:prepare:

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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion>

    <artifactId>com.conti.daisy.bundles</artifactId>

    <packaging>pom</packaging>

    <parent>
        <groupId>com.conti.daisy</groupId>
        <artifactId>com.conti.daisy.build.parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>./com.conti.daisy.build.parent</relativePath>
    </parent>

 <profiles>
    <profile>
        <id>daisy</id>
        <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
     <modules>
     ...
     </modules>
    </profile>
    <profile>
        <id>linuxtools</id>
        <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
     <modules>
    <module>org.eclipse.linuxtools.docker.core</module>
 </modules>
</profile>

命令

mvn install -P !daisy     # make sure I have the linuxtools plugins in the local repo
mvn release:prepare -P !linuxtools -DreleaseVersion=1.1.99

这有一个缺点,即在跳过的插件中没有更新对父 pom 的引用,这再次使我的构建中断。

如何正确处理?

我最后做了什么,什么起作用了:

在我 运行 mvn release:prepare 之前,我 运行 mvn install 以确保所有插件都在本地仓库中。

然后我在 release:prepare 期间通过停用 linuxtools 配置文件排除了 linuxtools 模块,但我向 preparationGoalscompletionGoals 添加了以下目标:

    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
    <executions>
        <execution>
            <id>update-parent-version</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>none</phase>
            <configuration>
                <executable>mvn</executable>
                <workingDirectory>${rootlocation}</workingDirectory>
                <arguments>
                    <argument>versions:update-child-modules</argument>
                    <argument>-N</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>install</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>none</phase>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

这确保 linuxtools 父 pom 更新到新版本,并将新版本安装到本地 repo。