标签: maven-deploy-plugin

如何将 Maven 嵌入到我的应用程序中?

我想将 Maven 或具有所有魔力的库嵌入到我的 Java 应用程序中。

要点:

  • 他们是我想要执行的两项任务:

    1/ 在本地存储库中
    发布 jar 2/ 在私有企业存储库 (Nexus) 中发布 jar

  • 所有必需的 jar 必须位于公共 Maven 存储库中

  • jar 应该与 Maven 版本无关(即不特定于 Maven 2 或 3)

如果可以,请提供您的回复的片段。

java maven-2 maven maven-deploy-plugin maven-install-plugin

5
推荐指数
1
解决办法
3219
查看次数

从 Maven 命令行将 SNAPSHOT 工件和源部署到 Nexus

我正在尝试使用 maven 命令行部署一个 EXE 文件并将它的源文件压缩到 Sonatype Nexus。文件必须部署为快照。

所以,我有2个文件:

-testXYZ.exe and source file
-testXYZ.zip
Run Code Online (Sandbox Code Playgroud)

使用 maven 2.2.1 和此处描述的命令:

mvn deploy:deploy-file -Durl=file:///home/me/m2-repo \
                       -DrepositoryId=some.repo.id \
                       -Dfile=./path/to/artifact-name-1.0.jar \
                       -DpomFile=./path/to/pom.xml \
                       -Dsources=./path/to/artifact-name-1.0-sources.jar \
                       -Djavadoc=./path/to/artifact-name-1.0-javadoc.jar
Run Code Online (Sandbox Code Playgroud)

我可以部署EXE,但不能部署源代码,因为maven 2.2.1使用的是deploy-plugin v2.5,这个命令直到v2.7才被支持。我不允许使用较新版本的 maven,所以我尝试了不同的方法。

使用这两个后续命令,我可以部署这两个工件,但是无法从 nexus 下载源代码。

call mvn deploy:deploy-file -DgroupId=com.xyz -DartifactId=testXYZ -Dversion=1.1.116-SNAPSHOT -Dpackaging=zip -Dfile=testXYZ.zip -Dclassifier=sources -Durl=http://build:8081/nexus/content/repositories/snapshots -DrepositoryId=nexus
call mvn deploy:deploy-file -DgroupId=com.xyz -DartifactId=testXYZ -Dversion=1.1.116-SNAPSHOT -Dpackaging=exe -Dfile=testXYZ.exe -Durl=http://build:8081/nexus/content/repositories/snapshots -DrepositoryId=nexus
Run Code Online (Sandbox Code Playgroud)

部署后,我搜索 testXYZ 并单击工件源下载链接。Nexus 说:

“在路径“com.xyz:testXYZ:1.1.116-SNAPSHOT:c=sources:e=jar”上找不到项目!”

问题是 Maven 上传这些工件的方式:

Line form log file while source is uploading:
Uploaded: http://build:8081/nexus/content/repositories/snapshots/com/xyz/testXYZ/1.1.116-SNAPSHOT/testXYZ-1.1.116-20120106.111705-1-sources.zip
Line form log file …
Run Code Online (Sandbox Code Playgroud)

nexus maven-deploy-plugin

5
推荐指数
1
解决办法
1万
查看次数

如何使Maven Deploy插件仅上传特定文件?

我想在Nexus中已发布的版本添加两个zip
从本质上讲,它们是该应用程序的压缩演示,也是该应用程序的扩展版本。

使用Deploy插件,我在pom中定义了两个执行,每个文件一个,并将它们绑定到部署阶段。这是演示的一个:

<execution>
   <id>deploy-essential</id>
      <phase>deploy</phase>
      <goals>
         <goal>deploy-file</goal>
      </goals>
      <configuration>
         <file>${project.build.directory}/${project.artifactId}-${project.version}-demo.zip</file>
         <groupId>${project.groupId}</groupId>
         <artifactId>myproject</artifactId>
         <version>${project.version}</version>
         <classifier>demo</classifier>
         <repositoryId>nexus</repositoryId>
         <url>${targetrepository}</url>
         <generatePom>false</generatePom>
      </configuration>
   </execution>
Run Code Online (Sandbox Code Playgroud)

我希望Maven在执行此命令时上传文件并将元数据更新为给定的G / A / V坐标。但是,相反,它会将给定文件及其包含完整版本的姊妹文件上载到给定坐标,然后将它们两者再次上载到其原始坐标。

然后继续为第二次执行再次执行所有这些操作。这是我的日志摘录:

[INFO] --- maven-deploy-plugin:2.7:deploy-file (deploy-demo) @ bundle ---
Downloading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml
2 KB   

Downloaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml (2 KB at 4.8 KB/sec)
Uploading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/myproject-1.2.6-20121130.102624-5-demo.zip
...           
Uploaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/myproject-1.2.6-20121130.102624-5-demo.zip (13032 KB at 23105.2 KB/sec)
Downloading: http://nexus/repositories/snapshots/mygroup/myproject/maven-metadata.xml
533 B      

Downloaded: http://nexus/repositories/snapshots/mygroup/myproject/maven-metadata.xml (533 B at 34.7 KB/sec)
Uploading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml
2 KB    

Uploaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml (2 KB at 89.4 KB/sec) …
Run Code Online (Sandbox Code Playgroud)

deployment maven maven-deploy-plugin

5
推荐指数
1
解决办法
4311
查看次数

从 Maven 快照中获取生成的唯一版本

根据手册,在 Maven 3 中,我们被迫使用uniqueSnapshots=true. 这意味着每个部署1.0-SNAPSHOT实际上都由一些唯一的、规范的 ID 支持,例如1.0-20080207-230803-1.

因此,调用mvn deploy会产生在mvn调用可执行文件之前无法确定规范版本的工件。

因此,如果希望对之后生成的唯一 ID 调用任何操作,则必须尝试在mvn deploy完成后从 Maven 可执行文件中提取生成的 ID 。

有没有这样的机制来获取唯一ID?

例如,mvn deploy将产生以下输出:

Uploading: https://oss.sonatype.org/content/repositories/snapshots/io/airlift/slice/0.11-SNAPSHOT/slice-0.11-20150220.165404-2.jar
Run Code Online (Sandbox Code Playgroud)

但是如果0.11-20150220.165404-2不解析 Maven 的输出,似乎没有办法访问 ID 。

示例场景: mvn build 导致一个新的(唯一的)工件被推送到内部存储库管理器。完成后,我们希望通过 HTTP 推送通知以通知某个远程应用程序新的 SNAPSHOT 版本的应用程序。

虽然我们的资源库管理使我们能够查询最新的快照版本,这是一样的能够通过周围绝对引用到特定版本。

maven maven-deploy-plugin

5
推荐指数
1
解决办法
824
查看次数

为什么mvn release:perform总是创建一个新的快照版本并将其上传到存储库而不是非快照发行版?

  1. 我在Bitbucket中创建了一个公共存储库,可以为我保存所有发行版和快照发行版。
  2. 我正在使用wagon-git将jar上传到发布存储库。

这是我在pom.xml中的条目:

<pluginRepositories>
  <pluginRepository>
    <id>synergian-repo</id>
    <url>https://raw.github.com/synergian/wagon-git/releases</url>
  </pluginRepository>
</pluginRepositories>
...
<distributionManagement>
  <repository>
    <id>my id</id>
    <name>my repo name</name>
        <url>my repo url</url>
  </repository>
</distributionManagement>
...
<build>
  <extensions>
    <extension>
      <groupId>ar.com.synergian</groupId>
      <artifactId>wagon-git</artifactId>
      <version>0.2.5</version>
    </extension>
....
</build>
Run Code Online (Sandbox Code Playgroud)

我在做什么:

  1. mvn clean package (创建快照版本)
  2. mvn release:prepare (创建新的发行版本,并将该jar和标签适当地上传到我的git存储库中)
  3. 我签入更新的pom.xml,release.properties等。
  4. mvn release:perform -通过这一步骤,我希望将第2步创建的新发行版本上载到包含所有发行jar的存储库中。

相反,mvn release:perform会创建一个新的快照版本,并将该快照jar上传到releases存储库。

问题是:我如何设法将非快照发布jar上载到存储库,而不是始终创建和上载新快照版本?

我想念什么?

maven maven-release-plugin maven-deploy-plugin

5
推荐指数
1
解决办法
5084
查看次数

确定 Maven 部署文件的存储库 URL

我正在使用 Maven 来构建一个特定的项目,并且在 POM 中,我正在使用 maven shade 插件构建主要工件的 3 个不同变体(我正在创建具有各种包含日志框架组合的 uber jar)。阴影插件使用替代工件 ID 及其各自的依赖减少的 poms 创建 jar。

我现在面临的挑战是如何将这些新工件部署到我的远程存储库。我正在使用 maven install 插件将它们安装到我的本地 repo,但是 maven deploy 插件需要显式配置存储库 URL。我想要发生的是插件采用默认部署使用的任何远程存储库,无论是快照或发布存储库还是我通过命令行传入的另一个存储库 URL。我希望找到一些像 ${project.remoterepo.url} 这样的 maven 属性,它等同于已解决的 repo。当部署目标已经这样做时,必须显式配置远程 URL 似乎很愚蠢。

任何建议表示赞赏。谢谢!

java maven maven-deploy-plugin maven-shade-plugin

5
推荐指数
1
解决办法
1890
查看次数

目标org.apache.maven.plugins的执行default-deploy:maven-deploy-plugin部署失败。空指针异常

运行命令时

mvn -X clean deploy
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

        [INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ something ---
    [DEBUG] [buildinfo] Resolved artifact: org.apache.maven.plugins:maven-deploy-plugin:pom:2.7:build from: team (http://myrepo/maven/m2repos, releases+snapshots) Context is: plugin
    [DEBUG] [buildinfo] Resolved artifact: org.apache.maven.plugins:maven-deploy-plugin:jar:2.7:build from: team (http://myrepo/maven/m2repos, releases+snapshots) Context is: plugin
    [DEBUG] [buildinfo] Resolved artifact: junit:junit:jar:3.8.1:build from: C:\Users\user\.m2\repository (enhanced) Context is: plugin
    [DEBUG] [buildinfo] Resolved artifact: org.codehaus.plexus:plexus-utils:jar:1.5.6:build from: C:\Users\user\.m2\repository (enhanced) Context is: plugin
    [INFO] Uploading: scp://myrepo/export/maven/m2repos/com/team/myproject/10.8/myproject-10.8.war
    [INFO] Uploaded: scp://myrepo/export/maven/m2repos/com/team/myproject/10.8/myproject-10.8.war (162384 KB at 23020.0 KB/sec)
    [INFO] Uploading: scp://myrepo/export/maven/m2repos/com/team/myproject/10.8/myproject-10.8.pom
    [INFO] Uploaded: scp://myrepo/export/maven/m2repos/com/team/myproject/10.8/myproject-10.8.pom (46 KB at 27.3 …
Run Code Online (Sandbox Code Playgroud)

build maven-plugin maven-3 maven maven-deploy-plugin

5
推荐指数
1
解决办法
1398
查看次数

如何使用maven部署插件3.0.0-M1生成和上传校验和?

生成校验和的功能似乎已从安装插件转移到部署插件(请参阅MDEPLOY-231)。似乎不再有参数来控制校验和的生成和部署,无论是在安装插件 3.0.0-M1中(“createChecksum”参数显然不再存在),还是在部署插件 3.0.0-中M1

我假设现在默认情况下会激活校验和(请参阅此博客文章),但最终我的本地存储库和 Artifactory 中都没有任何校验和,并且我在日志中看不到任何与校验和相关的内容(运行 mvn deploy)。

这应该不重要,但也许是:我使用的是 https 传输,而不是 ssh。

这里是日志摘录:

[INFO] --- maven-install-plugin:3.0.0-M1:install (default-install) @ base-module ---

[INFO] Installing C:\data\src\s-libs\base\target\base-module-0.2.5-SNAPSHOT.jar to (...)
[INFO] Installing C:\data\src\s-libs\base\pom.xml to (...)
[INFO] Installing C:\data\src\s-libs\base\target\base-module-0.2.5-SNAPSHOT-sources.jar to (...)
[INFO] 
[INFO] --- maven-deploy-plugin:3.0.0-M1:deploy (default-deploy) @ base-module ---
Downloading (...)
Uploading to psys_mvn: https://psys.ex1.de/artifactory/psys_mvn/de/ex1/psys/base-module/0.2.5-SNAPSHOT/base-module-0.2.5-20200311.190843-3.jar
(...)
Uploading to psys_mvn: https://psys.ex1.de/artifactory/psys_mvn/de/ex1/psys/base-module/0.2.5-SNAPSHOT/base-module-0.2.5-20200311.190843-3.pom
(...)
Uploading to psys_mvn: https://psys.ex1.de/artifactory/psys_mvn/de/ex1/psys/base-module/0.2.5-SNAPSHOT/base-module-0.2.5-20200311.190843-3-sources.jar
(...)
Uploading to psys_mvn: https://psys.ex1.de/artifactory/psys_mvn/de/ex1/psys/base-module/0.2.5-SNAPSHOT/maven-metadata.xml
(...)
Uploading to psys_mvn: https://psys.ex1.de/artifactory/psys_mvn/de/ex1/psys/base-module/maven-metadata.xml
(...)
Run Code Online (Sandbox Code Playgroud)

checksum maven maven-deploy-plugin maven-install-plugin

5
推荐指数
1
解决办法
2911
查看次数

什么时候应该将 Maven 部署文件的 generatePom 设置为 false?

我像这样调用 deploy-file 将一些 JAR 加载到我的公司存储库中:

mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file \
  -Dfile=lib/SomeLib.jar \
  -DrepositoryId=mycompany-central \
  -Durl=http://myserver/artifactory/libs-release-local -DgeneratePom=false \
  -DgroupId=com.some.lib \
  -DartifactId=SomeLib \
  -Dversion=1.2.5.3 
Run Code Online (Sandbox Code Playgroud)

我设置generatePomfalse,我想生成或改变尽可能少的假设下。我正在加载的库碰巧是使用 maven 构建的,并且在META-INF.

问题:一般在什么情况下应该generatePom设置为false?在我的情况下应该generatePom设置为false

java maven maven-deploy-plugin

4
推荐指数
1
解决办法
2687
查看次数

保持maven部署插件免于部署测试失败

maven-release-plugin如果有单元测试失败,我很长时间不会发布(也就是将jar部署到maven repo).

出于各种原因,我想只使用maven部署插件,但显然即使在测试失败的情况下仍会部署maven-surefire-plugin.

因此而不仅仅是

mvn clean deploy
Run Code Online (Sandbox Code Playgroud)

我必须设置我的CI与(shell)做两步:

mvn clean test && mvn deploy -DskipTests=true
Run Code Online (Sandbox Code Playgroud)

我已经确定肯定没有设置忽略失败.理想情况下,我不想运行两个单独的进程.

当然,测试失败的部署不能是默认的吗?我错过了什么吗?

编辑它似乎是詹金斯问题..无法重现

我不确定Jenkins为什么或如何强制maven构建继续测试失败(我假设这是用于报告)但它没有显示任何传递给它的选项以继续.它似乎只发生在詹金斯说"模块改变,重新计算依赖图"时.

maven maven-deploy-plugin jenkins maven-surefire-plugin

4
推荐指数
1
解决办法
2057
查看次数