Donnerstag, 6. August 2009

Adding Googles GData Java API to your maven repository

The google gdata apis do not come with maven POM-files. Someone went through the trouble to "mavenize" the source but it is limited to linux as build plattform and currently out of date (compile errors). So I installed the JARs from the binary distribution of the APIs into my local repository - which are of course missing the dependencies between the individual JAR files. Here are two batch files which I used to install the JARs quite painlessly:

install.bat:

@SET mvn=d:\java\maven\bin\mvn
@%mvn% install:install-file -DgroupId=com.google.gdata
-DartifactId=%1 -Dversion=%2 -Dfile=%3 -Dpackaging=jar
-DgeneratePom=true


installall.bat:

call install.bat gdata-analytics 2.0 gdata-analytics-2.0.jar
call install.bat gdata-appsforyourdomain 1.0 gdata-appsforyourdomain-1.0.jar
call install.bat gdata-base 1.0 gdata-base-1.0.jar
call install.bat gdata-blogger 2.0 gdata-blogger-2.0.jar
call install.bat gdata-books 1.0 gdata-books-1.0.jar
call install.bat gdata-calendar 1.0 gdata-calendar-2.0.jar
call install.bat gdata-client 1.0 gdata-client-1.0.jar
call install.bat gdata-codesearch 2.0 gdata-codesearch-2.0.jar
call install.bat gdata-contacts 3.0 gdata-contacts-3.0.jar
call install.bat gdata-core 1.0 gdata-core-1.0.jar
call install.bat gdata-docs 2.0 gdata-docs-2.0.jar
call install.bat gdata-finance 2.0 gdata-finance-2.0.jar
call install.bat gdata-health 2.0 gdata-health-2.0.jar
call install.bat gdata-maps 2.0 gdata-maps-2.0.jar
call install.bat gdata-media 1.0 gdata-media-1.0.jar
call install.bat gdata-photos 2.0 gdata-photos-2.0.jar
call install.bat gdata-spreadsheet 3.0 gdata-spreadsheet-3.0.jar
call install.bat gdata-webmastertools 2.0 gdata-webmastertools-2.0.jar
call install.bat gdata-youtube 2.0 gdata-youtube-2.0.jar


You surely could get fancy and automate the splitting between artifact-name and version number, but hey, I needed those JARs installed quickly and that's what it does.

7 Kommentare:

  1. A better solution would be to get a repository manager and upload the artifacts (or automate this with the deploy:deploy-file goal).

    I'd suggest nexus: http://nexus.sonatype.org

    AntwortenLöschen
  2. an even better solution would be to write a script that iterates over all files, parses their name and decides the values of the parameters.

    AntwortenLöschen
  3. Take a look at this project: http://github.com/dcarter/Google-Data-APIs-Mavenized It contains a script to generate poms with full dependency information for all the gdata jars, and instructions for using the jars/poms that are hosted on a Sonatype public repository. Soon the project will be syncing these artifacts to the Maven central repo.

    AntwortenLöschen
  4. An even better solution would be to stop using Maven at all.

    AntwortenLöschen
  5. Hello,
    I have pushed a bit further my gdata maven repository stored on google code http://code.google.com/p/mandubian-mvn following David Carter idea based on Tattletale to extract dependencies and generate the Poms automatically. I have also added a Nexus Index to this repository and version up to 1.41.3 are currently mavenized! Have fun! Pascal

    AntwortenLöschen
  6. ahghgh...those "while()" blocks above should be "while(<cmd>)"

    AntwortenLöschen
  7. Here's another variant on the windows theme, but for those *nix/osx inclined. Assuming you grab the "gdata-java.xxx.zip" file from http://code.google.com/p/gdata-java-client/downloads/list, here's a couple scripts I wrote to help install those from their exploded location into your company's repo:

    {code}
    install.pl
    #!/usr/bin/perl -w

    my $artifactId=$ARGV[0];
    my $version=$ARGV[1];
    my $jar=$ARGV[2];
    die "must supply artifactId, version and jar on command line" unless ($artifactId && $version && $jar);

    my $cmd = "/usr/share/maven-2.1.0/bin/mvn deploy:deploy-file -DgroupId=com.google.gdata -DartifactId=$artifactId -Dversion=$version -Dfile=$jar -Dpackaging=jar -DgeneratePom=true -Durl=file:/// -Drepository=";
    print "executing command = $cmd\n";
    open(CMD, "$cmd|") or die "Could not exec $cmd $!";
    while() {
    print $_;
    }
    close(CMD);

    {code}

    installall.pl
    {code}
    #!/usr/bin/perl -w

    my @jars = `ls *.jar`;
    chomp(@jars);
    foreach my $jar (@jars) {
    #print "found jar $jar\n";
    if($jar =~ /(.*)-(\d\.\d)\.jar/) {
    #print "\tartifact is $1 and version is $2\n";
    my $cmd = "./install.pl $1 $2 $jar";
    open(CMD, "$cmd|") or die "Could not execute $cmd $!";
    while() {
    print $_;
    }
    close(CMD);
    }
    }

    {code}

    AntwortenLöschen