9

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


使用部署文件时不需要基础 pom 或任何可用的 pom。Settings.xml 是唯一保证存在的地方,但我不知道如何使用它来定义扩展。

4

4 回答 4

5

好的,好的,更正一下:您不能在定义的 in 中定义<build>元素。您可以在 中激活配置文件,但在您的.<profile>settings.xmlsettings.xmlbase-pom

对不起,我能想到的唯一其他方法(可能是你在找什么),就是将扩展 jar 直接复制到$M2_HOME/lib. 所有$M2_HOME/lib/*.jar都放在类路径中,所以这实际上必须与<extension>.

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

好的,只需尝试将扩展 jar 复制到

    $M2_HOME/lib
于 2009-03-06T10:33:15.113 回答
5

我不知道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 作为协议来执行部署文件:

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
于 2013-05-12T23:51:58.610 回答
2

您需要将 wagon 扩展添加到您的顶级 pom.xml。大多数环境在所有项目的顶部都有一个企业环境(最佳实践),所以这对于个人开发人员来说通常不会太痛苦——他们只是从企业 pom.xml 继承。

<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>

当您注册您的提供者时,我相信它也会注册协议模式。您可以在此处查看现有提供商的完整列表

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

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

可以在此处找到 Git 提供程序源的链接。

于 2009-03-06T14:52:03.820 回答
2

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

您可以通过将它们放在以下位置来保持 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 依赖:复制依赖 -DoutputDirectory=$M2_HOME/lib/ext
于 2012-05-11T19:14:22.707 回答