Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven repository for Google Code project

Tags:

I'm hosting a small open source project on Google Code, and I have been asked to submit the jar to a publicly accessible Maven repository. I have almost no practical knowledge of Maven. What would be the best way to do this?

Is there some central repository that I can submit to, or can I host my own? What would I need to do when I want to release a new version of the jar?

I've been Googling and found this, which looks nice and simple, but it seems a bit ... contrary to the spirit of Maven, to commit jar files to SVN :).

Also, would there be a way to still keep track of the download count, as Google Code does?

EDIT

I've been getting some answers, some of which containing hints on what to add to my pom.xml. Thanks guys! But obviously I forgot to mention one important thing: my build script is in ANT, and to put it bluntly, I intend to keep it that way :). I just want to make it easier for Maven users to include my jar in their projects.


The solution I went with in the end

In the end, I did use the solution I referenced before, where I simply commit a Maven repo to SVN. I have the ANT script call Maven to set up the local repo, and then call SVN to commit it to Google Code. For those interested: look at my build script here, in the publish-maven target.

like image 961
jqno Avatar asked Aug 14 '09 22:08

jqno


People also ask

How do I add a maven repository to Google?

Where is Google's Android Maven repository? Google's Maven repository can be accessed from https://maven.google.com (an alternative URL is https://dl.google.com/dl/android/maven2/). If you are using Gradle 4.1 or higher, you can use it by adding google() to your repositories configuration in your build.

What is Google maven repository?

In Maven terminology, a repository is a directory where all the project jars, library jar, plugins or any other project specific artifacts are stored and can be used by Maven easily.

Does Google use maven?

Not only has Google been criticized as soft in its support of U.S. defense and national security since its withdrawal from Project Maven, but it's also been condemned for its work providing AI in China.

What is m2 repository in maven?

m2 folder is the default folder used by maven to store its: settings. xml file which specifies properties, like the central repository to download your dependencies, the location of the so-called localRepository. by default, the localRepository in which maven stores all the dependencies your project might need to run.


2 Answers

There is a guide to the central repository that has a section on uploading projects that may help. If nothing else you can check the naming conventions and minimal information requirements against your project.

Sonatype also do OSS Repository hosting, see their guide for details.

Update: I'm not saying you should change your build process - if Ant works for you stick with it. It's worth following the Maven conventions in your POM regardless of your build method. As the point of putting your jar in a Maven repository is to make it accessible to Maven users, you will therefore need to define a POM for your published artifact. Following the naming conventions will help your users so you might as well do it. For example adding the SCM details to the pom will (amongst other things) allow your users to import the project into their workspace using the IDE integrations for Maven.

Basically, you have 4 options:

  1. Perform a standard Maven build against a Maven repository (already ruled out)
  2. Set up a Maven repository, do your builds with Ant, and use Maven to deploy the jar and POM.
  3. Set up a Maven repository, ad use an Ant HTTP task to publish the artifacts
  4. Use a Subversion "repository", and use the SvnAnt task to publish the artifacts

Option 1

Use Maven to build and deploy the artifacts (see the Maven book and the above links for details).


Option 2

Assuming you have a build process that creates your jar, and you've defined the POM, your best bet is to publish it to the Sonatype OSS repository as above.

Deploying an existing jar to a standard Maven repository is simple with the Maven deploy plugin's deploy-file goal:

  1. Set up your repository (e.g on the Sonatype servers by raising a Jira request)
  2. Build your jar with Ant.
  3. If you have defined a POM, put it in the same directory as the jar.
  4. Run the deploy-file goal:

    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

Note that the Maven deploy goal will automatically translate the pom.xml to [project-name]-[version].pom. If you are doing either of the other two alternatives, you will need to ensure you commit the POM with the final name, i.e. [project-name]-[version].pom. You'll also need to ensure you compose the relative paths for the artifacts following the Maven conventions.

E.g. for groupId=com.foo.bar, artifactId=my-project version=1.0.0, the path to the files will be:

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

Option 3

If you want to use Ant to deploy to a Maven repository, you can use an Ant HTTP library (Note I've not tried this myself) . You would compose two HTTP put tasks, one for the jar and one for the 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> 

Option 4

If you want to avoid Maven completely and use Ant to deploy to an SVN-backed repository, you can use the SvnAnt Subversion library. you would simply need to do configure the Svn import task to add your artifacts to the Remote Subversion repository.

<import path ="/dir/containing/the/jar/and/pom"      url="svn://your/svn/repository"     message="release"/> 
like image 189
Rich Seller Avatar answered Oct 11 '22 12:10

Rich Seller


Check wagon-svn. It will allow you to 'deploy' to a Subversion repository. It's a little convoluted, but it's better than nothing. I know of a few projects that use it at java.net, and I also came across some projects using it at code.google.com.

If you want to use it, then you first need to load wagon-svn as an extension:

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

Next, you need to set your deployment targets using the svn: protocol identifier. Here's an example I copied from the Internet.

<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> 
like image 32
Wilfred Springer Avatar answered Oct 11 '22 12:10

Wilfred Springer