22

我在 Google Code 上托管了一个小型开源项目,我被要求将 jar 提交到可公开访问的 Maven 存储库。我几乎没有 Maven 的实际知识。最好的方法是什么?

是否有一些我可以提交的中央存储库,或者我可以自己托管?当我想发布新版本的 jar 时,我需要做什么?

我一直在谷歌上搜索,发现这个,看起来不错,很简单,但似乎有点……与 Maven 的精神相反,将 jar 文件提交到 SVN :)。

此外,是否有办法像 Google Code 那样仍然跟踪下载次数?

编辑

我得到了一些答案,其中一些包含关于要添加到我的pom.xml. 多谢你们!但显然我忘了提一件重要的事情:我的构建脚本是在 ANT 中的,坦率地说,我打算保持这种状态:)。我只是想让 Maven 用户更容易将我的 jar 包含在他们的项目中。


我最终采用的解决方案

最后,我确实使用了我之前引用的解决方案,我只是将 Maven 存储库提交给 SVN。我让 ANT 脚本调用 Maven 来设置本地存储库,然后调用 SVN 将其提交给 Google Code。对于那些感兴趣的人:在目标中查看我的构建脚本publish-maven

4

4 回答 4

24

有一个中央存储库指南,其中有一个关于上传项目的部分可能会有所帮助。如果不出意外,您可以根据您的项目检查命名约定和最少的信息要求。

Sonatype 也做 OSS Repository 托管,详见他们的指南

更新:我并不是说你应该改变你的构建过程——如果 Ant 适合你的话,就坚持下去。无论您的构建方法如何,都值得在您的 POM 中遵循 Maven 约定。由于将 jar 放入 Maven 存储库是为了让 Maven 用户可以访问它,因此您需要为已发布的工件定义 POM。遵循命名约定将对您的用户有所帮助,因此您不妨这样做。例如,将 SCM 详细信息添加到 pom 将(除其他外)允许您的用户使用 Maven 的 IDE 集成将项目导入他们的工作区。

基本上,您有 4 个选项:

  1. 针对 Maven 存储库执行标准 Maven 构建(已排除)
  2. 设置 Maven 存储库,使用 Ant 进行构建,并使用 Maven 部署 jar 和 POM。
  3. 设置 Maven 存储库,使用 Ant HTTP 任务发布工件
  4. 使用 Subversion “存储库”,并使用 SvnAnt 任务发布工件

选项1

使用 Maven 构建和部署工件(有关详细信息,请参阅Maven 书和上面的链接)。


选项 2

假设您有一个创建 jar 的构建过程,并且您已经定义了 POM,那么最好的办法是将其发布到上面的 Sonatype OSS 存储库。

使用 Maven 部署插件的 deploy-file 目标,将现有 jar 部署到标准 Maven 存储库很简单:

  1. 设置您的存储库(例如,通过提出Jira 请求在 Sonatype 服务器上)
  2. 用 Ant 构建你的 jar。
  3. 如果你已经定义了一个 POM,把它和 jar 放在同一个目录下。
  4. 运行部署文件目标:

    mvn deploy:deploy-file -Durl= http://path/to/your/repository \ -DrepositoryId=some.id \ -Dfile=path-to-your-artifact-jar \ -DpomFile=path-to-your- pom.xml

请注意,Maven 部署目标会自动将 pom.xml 转换为 [project-name]-[version].pom。如果您正在执行其他两个替代方案中的任何一个,则需要确保使用最终名称提交 POM,即 [project-name]-[version].pom。您还需要确保按照 Maven 约定编写工件的相对路径。

例如,对于 groupId=com.foo.bar、artifactId=my-project version=1.0.0,文件的路径将是:

/com/foo/bar/my-project/my-project-1.0.0.jar
/com/foo/bar/my-project/my-project-1.0.0.pom

选项 3

如果您想使用 Ant 部署到 Maven 存储库,可以使用Ant HTTP 库(注意我自己没有尝试过)。您将编写两个 HTTP put 任务,一个用于 jar,一个用于 POM。

<httpput url="http://path/to/your/repository" putFile="/path/to/yourproject.pom">
  <userCredentials username="user" password="password"/>
</httpput>
<httpput url="http://path/to/your/repository" putFile="/path/to/yourproject.jar">
  <userCredentials username="user" password="password"/>
</httpput>

选项 4

如果您想完全避免使用 Maven 并使用 Ant 部署到 SVN 支持的存储库,您可以使用SvnAnt Subversion 库。您只需配置Svn 导入任务即可将您的工件添加到远程 Subversion 存储库。

<import path ="/dir/containing/the/jar/and/pom" 
    url="svn://your/svn/repository"
    message="release"/>
于 2009-08-15T07:16:48.897 回答
7

检查 wagon-svn。它将允许您“部署”到 Subversion 存储库。这有点令人费解,但总比没有好。我知道一些在 java.net 上使用它的项目,我还在 code.google.com 上遇到了一些使用它的项目。

如果你想使用它,那么你首先需要加载 wagon-svn 作为扩展:

  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.jvnet.wagon-svn</groupId>
        <artifactId>wagon-svn</artifactId>
        <version>...</version>
      </extension>
    </extensions>

接下来,您需要使用 svn: 协议标识符设置部署目标。这是我从网上复制的一个例子。

<distributionManagement>
    <repository>
        <id>maven-config-processor-plugin-repo-releases</id>
        <name>Maven Repository for Config Processor Plugin (releases)</name>
        <url>svn:https://maven-config-processor-plugin.googlecode.com/svn/maven-repo/releases</url>
        <uniqueVersion>false</uniqueVersion>
    </repository>
    <snapshotRepository>
        <id>maven-config-processor-plugin-repo-releases</id>
        <name>Maven Repository for Config Processor Plugin (snapshots)</name>
        <url>svn:https://maven-config-processor-plugin.googlecode.com/svn/maven-repo/snapshots</url>
        <uniqueVersion>false</uniqueVersion>
    </snapshotRepository>
</distributionManagement>
于 2009-08-15T07:24:52.157 回答
1

检查 Maven 存储库是否支持maven deploy plugin。这将是最简单的方法。

大多数存储库使用 ssh 作为传输。有关详细信息,请参阅

设置好后,您所要做的就是:

  mvn deploy:deploy
于 2009-08-14T22:43:50.850 回答
0

您可以将您的 jar 提交到https://clojars.org/

在你的pom.xml

<repositories>
  <repository>
    <id>clojars.org</id>
    <url>http://clojars.org/repo</url>
  </repository>
</repositories>
于 2012-07-07T23:36:20.123 回答