如何使用deploy:deploy-file命令部署包含源代码文件的jar文件

11

我有以下插件用于创建-sources.jar并将特定命名的jar部署到存储库。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <version>${project.version}-r${buildNumber}</version>
        <classifier>${env}</classifier>
        <packaging>jar</packaging>
        <file>${project.build.directory}/${project.build.finalName}.jar</file>
        <url>${artifactory.url}/libs-release-local</url>
        <repositoryId>artifactory.digiterre.com</repositoryId>
        <pomFile>${project.basedir}/pom.xml</pomFile>
    </configuration>
</plugin>

我希望同时部署*-sources.jar文件。我已经尝试添加第二个文件条目甚至第二个部署插件,但好像只有一个文件被部署了。

是否可以使用deploy:deploy-file一次性部署两个文件,或者我必须设置第二个TeamCity构建来部署源代码?


这是一个重复的问题,与https://dev59.com/KW445IYBdhLWcg3wucmo相同。 - Paul Grime
我已经查看了那篇帖子并尝试了建议。由于我正在部署具有特定分类器的文件,因此两者都无法正常工作。另外,jar-no-fork也不起作用,Maven会抛出错误。 - Yoztastic
有点不太干净,但也许可以使用来自Maven的Ant任务,从命令行执行部署? - Paul Grime
我没有使用任何pom.xml文件,从jenkin中我该如何动态传递版本号。请给我建议。 - JDGuide
3个回答

8
当您使用maven-source-plugin时,生成的jar将自动附加到项目构件上(参数的默认设置为“true”),如果您执行deploy,它将随之部署。可惜的是,您无法向源jar添加分类器(在您的情况下是${env})。这就是我要使用以下配置的原因:
...
<artifactId>com.pie.mash.repo.mince-${env}</artifactId>
<version>1.18-r${buildNumber}</version>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.1.2</version>
      <executions>
        <execution>
          <goals>
            <goal>jar-no-fork</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

此外,我在Stack Overflow上找到了一个关于“Maven部署源代码分类器”的问题。您可以使用那里建议的解决方法。

然而,使用这个示例仍然无法部署源代码。 - Yoztastic
@Yoztastic,你能提供“mvn deploy”的日志文件吗? - Andrew Logvinov
[https://docs.google.com/document/d/1A4BoVAn9rLqvK4ZUCTJ8q6axGMRAYUWAxMHZLcgVN70/edit?pli=1] 请注意,com.pie.mash.repo.mince-1.18-r5135-pie_gravy.jar是期望的名称,但是会上传com.pie.mash.repo.mince-1.18-sources.jar - Yoztastic
这将无法工作,因为在 <version>1.18-r${buildNumber}</version> 的上下文中,r${buildNumber} 将不会被识别,它只有在后面才能使用。 - Yoztastic
很遗憾,它不会起作用。仔细查看您提供的日志 - com.pie.mash.repo.mince-1.18.jar 被部署了。这是因为 Maven 从项目中获取坐标,在项目中您有 <version>1.18</version> - Andrew Logvinov
显示剩余4条评论

4
我们可以使用deploy:deploy-file来上传多个JAR文件(源代码、测试代码和文档)与主JAR构件一起。我们只需要在deploy:deploy-file插件调用中提供额外的信息即可。下面的命令中加粗的部分是需要添加的内容:

mvn deploy:deploy-file
-Dfile=helloWorld.jar
-Durl=https://localhost/nexus/content/repositories/snapshots/
-DrepositoryId=snapshot
-Dfiles=helloWorld-6.4.1.3.SNAPSHOT-sources.jar,helloWorld-6.4.1.3.SNAPSHOT-tests.jar
-Dtypes=jar,jar -Dclassifiers=sources,tests
-DgroupId=com
-DartifactId=helloWorld
-Dversion=6.4.1.3.SNAPSHOT
-Dpackaging=jar
-Dpomfile=pom.xml

  • 我们需要指定由逗号分隔的文件列表。
  • 我们需要指定这些额外文件的类型。
  • 我们需要为这些额外文件添加分类器信息。

请正确格式化答案。如需更多详细信息,请查看[回答]。 - ItamarG3

1

mvn deploy:deploy-file 只能部署单个构件。相反,您可以使用 mvn deploy(它会调用 mvn deploy:deploy)来部署构件及其 pom 文件以及附加的构件(如源代码和 javadoc)。请参阅 maven deploy plugin 的目标概述。


我正在使用deploy:deploy-file命令,url=http://repo.xxx.xxx.com/content/repositories/peroo-snapshots/,repositoryId=peroo-snapshots,groupId=com.xxx.ist.curo.testtalentClient,artifactId=pet_client_osx,version=${CLIENT_VERSIONCITEST}.0-SNAPSHOT,packaging=tar,classifier=Rev_${SVN_REVISION},file=$WORKSPACE/CWave3/TalentOSX/build/Release/Talent.app.tar。 - JDGuide
CLIENT_VERSIONCITEST 环境变量应该每次都会更改,但在 Jenkins 上却无法正常工作。 - JDGuide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接