Maven:如何使用deploy-file和custom wagon进行部署

时间:2009-03-02 14:24:20

标签: java maven-2 maven-scm

我正在尝试使用自定义maven wagon扩展将jar部署到我自己的存储库。我可以在settings.xml中以某种方式配置它识别要与特定货车一起使用的自定义URL方案,还是我必须始终修改pom文件以包含货车扩展?


使用deploy-file时不需要基本pom或任何pom。 Settings.xml是唯一保证存在的地方,但我无法弄清楚如何使用它来定义扩展。

4 个答案:

答案 0 :(得分:5)

好的,好的,更正:您无法在<build>中定义的<profile>内定义settings.xml元素。您可以在settings.xml中激活个人资料,但可以在base-pom中对其进行定义。

对不起,我能想到的唯一其他方式(可能是你在寻找什么),就是直接在$M2_HOME/lib下复制扩展jar。所有$M2_HOME/lib/*.jar都放在类路径中,因此它实际上必须与<extension>具有相同的效果。

然而,扩展程序更好,因为您可以更轻松地控制使用哪个版本的扩展程序(例如,通过基础pom)。

好的,只需尝试复制

下的扩展jar
    $M2_HOME/lib

答案 1 :(得分:5)

我不知道comment above by Brian Fox在2013年是否仍然有效。但最后我必须在我尝试上传工件的目录中创建一个最小的pom.xml以启用wagon构建扩展

我必须将groupId,artifactId和version添加到pom.xml中,以便Maven不会抱怨,尽管我将它们提供给命令行上的deploy-file目标(我猜想deploy-file只会关心命令行参数):

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
<groupId>your-groupId</groupId>
<artifactId>your-artifactId</artifactId>
<version>your-version</version>
<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>2.4</version>
    </extension>
  </extensions>
</build>
</project>

使用这个简单的“pom.xml”,我可以使用scp作为协议来执行deploy-file:

mvn deploy:deploy-file -Durl=scp://shell.sourceforge.net:/home/project-web/... -DrepositoryId=repoId -Dfile=my-file.jar -DgroupId=your-groupId -DartifactId=your-artifactId -Dversion=your-version -Dpackaging=jar

答案 2 :(得分:2)

您需要add the wagon extension to your top level pom.xml。大多数环境都有一个企业级项目(最佳实践),因此对于个别开发人员而言,这通常不会太痛苦 - 他们只是从企业pom继承。

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-scm</artifactId>
      <version>1.0-alpha-7-SNAPSHOT</version>
    </extension>
    <extension>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-manager-plexus</artifactId>
      <version>1.0-beta-3-SNAPSHOT</version>
    </extension>
    <extension>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-provider-svnexe</artifactId>
      <version>1.0-beta-3-SNAPSHOT</version>
    </extension>
  </extensions>
</build>
<distributionManagement>
  <site>
    <id>my.svn.server</id>
    <url>scm:svn:https://username@svn.apache.org/svn/root/module</url>
  </site>
</distributionManagement>

当您注册提供商时,它也会注册协议模式,我相信。您可以看到full list of the existing providers here

我相信是注册扩展名的getScmType()方法,但我不是100%肯定。

/** {@inheritDoc} */
public String getScmType()
{
    return "git";
}

The link to the Git provider's source can be found here.

答案 3 :(得分:2)

siddhadev是对的,但还有其他一些东西...... (我把它放在评论中,但我没有足够的声誉)

您可以通过将JAR放在以下位置来保持JAR的完全分离:   $ M2_HOME / lib / ext目录

您需要所有依赖项,因此请执行以下操作:

  1. cd~ / .m2 / repository / org / apache / maven / wagon / wagon-ssh-external / 2.2
  2. cp wagon-ssh-external-2.2.jar $ M2_HOME / lib / ext
  3. cp wagon-ssh-external-2.2.pom pom.xml
  4. mvn依赖:copy-dependencies -DoutputDirectory = $ M2_HOME / lib / ext