Google Code项目的Maven存储库

时间:2009-08-14 22:17:52

标签: maven-2 google-code

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

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

我一直在谷歌搜索并发现this,看起来很简单,但似乎有点......与Maven的精神相反,将jar文件提交给SVN :)。

此外,还有一种方法可以跟踪谷歌代码的下载次数吗?

修改

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


我最终采用的解决方案

最后,我之前使用过解决方案I referenced,我只是将一个Maven repo提交给SVN。我有ANT脚本调用Maven来设置本地仓库,然后调用SVN将其提交给Google Code。对于那些感兴趣的人:在publish-maven目标中查看我的构建脚本here

4 个答案:

答案 0 :(得分:24)

有一个guide to the central repository有一个关于上传可能有用的项目的部分。如果没有别的,您可以检查命名约定和对项目的最低信息要求。

Sonatype也会执行OSS存储库托管,有关详细信息,请参阅their guide

更新:我不是说你应该改变你的构建过程 - 如果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任务发布工件

  5. 选项1

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


    选项2

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

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

    1. 设置您的存储库(例如,通过引发Jira request
    2. 在Sonatype服务器上
    3. 使用Ant构建jar。
    4. 如果您已定义POM,请将其放在与jar相同的目录中。
    5. 运行部署文件目标:

      mvn deploy:deploy-file -Durl = http://path/to/your/repository \                    -DrepositoryId = some.id \                    -Dfile =路径到你的工具罐子\                    -DpomFile =路径到您的-的pom.xml

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

      E.g。对于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 library(注意我自己没有尝试过)。你将组成两个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 library。您只需要配置Svn import任务即可将工件添加到Remote Subversion存储库。

      <import path ="/dir/containing/the/jar/and/pom" 
          url="svn://your/svn/repository"
          message="release"/>
      

答案 1 :(得分:7)

检查旅行车-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:protocol标识符设置部署目标。这是我从互联网上复制的一个例子。

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

答案 2 :(得分:1)

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

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

一旦设置完毕,您所要做的就是:

  mvn deploy:deploy

答案 3 :(得分:0)

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

pom.xml

<repositories>
  <repository>
    <id>clojars.org</id>
    <url>http://clojars.org/repo</url>
  </repository>
</repositories>