将参数传递给Maven发布版本

时间:2013-04-14 23:11:57

标签: java maven jenkins maven-release-plugin

我正在尝试使用Maven发布库并对sourceforge执行site-deploy(我先创建了一个交互式shell)。该版本由Jenkins工作完成(使用Jenkins的Maven Release Plugin)。

我试过了:

-X -e -Dresume=false -Dusername=puce release:prepare release:perform -Darguments="-Dusername=puce"

-X -e -Dresume=false -Dusername=puce -Darguments=-Dusername=puce release:prepare release:perform

但两次工作都在站点挂起:部署第一个模块:

 [INFO] --- maven-site-plugin:3.2:deploy (default-deploy) @ myproject-parent ---
 [INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
 [INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
 Using private key: /opt/jenkins/.ssh/id_dsa

当我停止工作时,最后会打印以下内容:

Password for ${username}@shell.sourceforge.net: channel stopped

这可能意味着$ {username}未解析。

如何解析$ {username}?

修改

请注意,以下运行正常:

site-deploy -Psonatype-oss-release -Dusername=puce

编辑2: 作为发布的一部分:执行maven执行以下命令:

/usr/share/maven/bin/mvn -s /tmp/release-settings7797889802430474959.xml deploy site-deploy --no-plugin-updates --batch-mode -Psonatype-oss-release -P nexus -f pom.xml

-Dusername=puce似乎没有传递给这个maven命令......

另请注意help:effective-pom显示以下maven-release-plugin配置:

<plugin>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.2.2</version>
  <configuration>
    <mavenExecutorId>forked-path</mavenExecutorId>
    <useReleaseProfile>false</useReleaseProfile>
    <arguments>-Psonatype-oss-release</arguments>
  </configuration>
</plugin>

所以'arguments'被定义了,它的值似乎达到了嵌入式maven命令而不是命令行传递的值......

3 个答案:

答案 0 :(得分:18)

我过去成功完成的工作如下:

  • 在POM文件中定义属性,例如:

    <properties>
        <release.arguments></release.arguments>
    </properties>
    
  • 将POM属性添加到POM文件中的插件配置,例如;

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
            <arguments>${release.arguments}</arguments>
           ...
    
  • 通过命令行中的属性传递参数,例如:

    mvn release:prepare -Drelease.arguments="-N -Prelease"
    

希望这有帮助。

答案 1 :(得分:7)

重写

<plugin>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.2.2</version>
  <configuration>
    <mavenExecutorId>forked-path</mavenExecutorId>
    <useReleaseProfile>false</useReleaseProfile>
    <arguments>-Psonatype-oss-release</arguments>
  </configuration>
</plugin>

    <plugin>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
            <mavenExecutorId>forked-path</mavenExecutorId>
            <useReleaseProfile>false</useReleaseProfile>
            <arguments>-Psonatype-oss-release -Dusername=${username}</arguments>
        </configuration>
    </plugin>
其中一位父母做了伎俩。

似乎是一个错误,命令行上的值不会覆盖POM中的值。

答案 2 :(得分:0)

我的解决方案类似于Sander Verhagen's。我只添加了一行。

我如何跑步:

mvn --batch-mode release:prepare -Denvironment=production

我的配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
                <tag>${artifactId}-${version}-${environment}</tag>
                <arguments>-Denvironment=${environment}</arguments>
              <releaseProfiles>release</releaseProfiles>
            </configuration>
        </plugin>
    </plugins>
</build>

区别在于,现在我的子模块使用变量environment,而无需定义两次(即-Darguments=-Denvironment=production -Denvironment=production)。我还为我提供了不添加属性标签的灵活性。