Using gradle/Ivy with special maven repositories

View: New views
2 Messages — Rating Filter:   Alert me  

Using gradle/Ivy with special maven repositories

by Pfau, Matthias :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,
the java.net-Repositories are a bit special (both contain a different subset of projects):
* http://download.java.net/maven/2 -> Is a true maven2 repository
* http://download.java.net/maven/1 -> Is a maven1 repository (directory layout) which also contains maven2 poms. These poms contain dependency descriptions that should be used, if possible.

One Problem with when using Ivy's IBiblioResolver is that its creators never thought about this combination (m1 directory structure/m2 poms). One essential difference between m1 and m2 directory structures is how the organization is mapped to the file system. Examples:
* m1: "org.gradle" -> One Folder
* m2: "org/gradle" -> Folder with subfolders

That is why you can not make use of the poms in the repository http://download.java.net/maven/1 which requires you to explicitly list all dependencies.

The solution to this problem is rather easy, because of gradle's design approach.

1. Create your own resolver. Place the following contents in a File named '$projectDir/buildSrc/src/main/groovy/build/SunResolver.groovy':

        package build
       
        import org.apache.ivy.plugins.resolver.IBiblioResolver
        import org.apache.ivy.core.module.id.ModuleRevisionId
       
        class SunResolver extends IBiblioResolver {
       
            protected ModuleRevisionId convertM2IdForResourceSearch(ModuleRevisionId mrid) {
                return mrid
            }
        }

2. Use the Resolver when declaring your repositories:

        import build.*
       
        repositories {
                mavenRepo urls: 'http://download.java.net/maven/2'
                add(new SunResolver()) {
                        name = 'java.net M1 Repo'
                  m2compatible = true
                  setRoot("http://download.java.net/maven/1/")
                  pattern = "[organisation]/[ext]s/[module]-[revision].[ext]"
          }
        }

3. Declare your dependencies (e.g. jax-ws)

        dependencies {
                compile 'com.sun.xml.ws:jaxws-rt:2.1.7'
                compile 'com.sun.xml.ws:jaxws-tools:2.1.7'
        }

Kind regards,
Matthias

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email



Re: Using gradle/Ivy with special maven repositories

by hdockter :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On May 29, 2009, at 9:24 AM, Pfau, Matthias wrote:

> Hello,
> the java.net-Repositories are a bit special (both contain a  
> different subset of projects):
> * http://download.java.net/maven/2 -> Is a true maven2 repository
> * http://download.java.net/maven/1 -> Is a maven1 repository  
> (directory layout) which also contains maven2 poms. These poms  
> contain dependency descriptions that should be used, if possible.
>
> One Problem with when using Ivy's IBiblioResolver is that its  
> creators never thought about this combination (m1 directory  
> structure/m2 poms). One essential difference between m1 and m2  
> directory structures is how the organization is mapped to the file  
> system. Examples:
> * m1: "org.gradle" -> One Folder
> * m2: "org/gradle" -> Folder with subfolders
>
> That is why you can not make use of the poms in the repository http://download.java.net/maven/1 
>  which requires you to explicitly list all dependencies.
>
> The solution to this problem is rather easy, because of gradle's  
> design approach.
>
> 1. Create your own resolver. Place the following contents in a File  
> named '$projectDir/buildSrc/src/main/groovy/build/SunResolver.groovy':
>
> package build
>
> import org.apache.ivy.plugins.resolver.IBiblioResolver
> import org.apache.ivy.core.module.id.ModuleRevisionId
>
> class SunResolver extends IBiblioResolver {
>
>    protected ModuleRevisionId  
> convertM2IdForResourceSearch(ModuleRevisionId mrid) {
>        return mrid
>    }
> }
>
> 2. Use the Resolver when declaring your repositories:
>
> import build.*
>
> repositories {
> mavenRepo urls: 'http://download.java.net/maven/2'
> add(new SunResolver()) {
> name = 'java.net M1 Repo'
>  m2compatible = true
>  setRoot("http://download.java.net/maven/1/")
>  pattern = "[organisation]/[ext]s/[module]-[revision].[ext]"
> }
> }
>
> 3. Declare your dependencies (e.g. jax-ws)
>
> dependencies {
> compile 'com.sun.xml.ws:jaxws-rt:2.1.7'
> compile 'com.sun.xml.ws:jaxws-tools:2.1.7'
> }
>
> Kind regards,
> Matthias

Thanks for sharing this. Your are welcome to add a wiki page to our  
wiki for this.

- Hans

--
Hans Dockter
Gradle Project Manager
http://www.gradle.org



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email