That works really well. Thanks for this - much appreciated! To have a single project generating multiple jars compared to 20+ related projects could be a real timesaver for me.
Would I have to do something some extra configuration to get 'gradle install' to work as well? Regards Mark On 17 June 2011 00:34, Luke Daley <[email protected]> wrote: > Hi, > > If you can, avoid using classifiers here and actually publish as individual > artifacts (classifiers can be problematic in builds). > > Here's how you could do it… > > def components = [ > [name: "foo"], > [name: "bar"], > [name: "baz"] > ] > > components.each { comp -> > project.task(comp.name, type: Jar) > } > > You then need to assign these artifacts to a configuration (the convention > is to use the “archives” configuration)… > > artfiacts { > components.each { archives(tasks[it.name]) } > } > > Then you need to declare that these jars are published individually… > > uploadArchives { > repositories.mavenDeployer { > repository(url: "file://localhost/tmp/myRepo/") > components.each { component -> > addFilter(component.name) { artifact, file -> artifact.name == > component.name } > } > } > } > > -- > Luke Daley > Principal Engineer, Gradleware > http://gradleware.com > > Please vote Gradle for JAX Awards » http://vote.jax-awards.com > > On 17/06/2011, at 6:52 AM, Eric Berry wrote: > > You should probably look at the maven plugin: > http://www.gradle.org/maven_plugin.html > > As for the multiple artifacts, it would probably be easiest to just assign > different classifiers for them - similar to uploading source and javadoc > jars: > http://gradle.1045684.n5.nabble.com/javadoc-and-source-jars-td3246213.html > > > On Thu, Jun 16, 2011 at 1:45 PM, Mark Davidson <[email protected]>wrote: > >> This approach works great. >> >> My next question is - how can I deploy the generated jars to a repository? >> I've read up about addFilter() but can't figure out how to use this to >> upload the jars with same groupId and unique artifactId (e.g. >> "$prefix.$jarname"). Any ideas? >> >> Regards >> >> Mark >> >> On 15 June 2011 19:19, Eric Berry <[email protected]> wrote: >> >>> You should be able to do this. You don't even need the extra task really, >>> unless you want just one task to run. >>> >>> You can set this up similar to below in the config phase: >>> [code] >>> def components = [ >>> [name: "foo"], >>> [name: "bar"], >>> [name: "baz"] >>> ] >>> >>> components.each { comp -> >>> project.task(comp.name, type: Jar) { >>> } >>> } >>> [/code] >>> >>> If you run 'gradle tasks' you'll see 3 new tasks 'foo', 'bar', and 'baz'. >>> >>> You could go further and add each of these tasks to the artifacts closure >>> so that the jars will be produced when you build the project. >>> >>> >>> >>> >>> On Wed, Jun 15, 2011 at 4:26 AM, Mark Davidson <[email protected]>wrote: >>> >>>> Hi there >>>> >>>> I have a project that I want to package as a large number of jars (~30). >>>> I've seen a solution on the mailing list that looks like this: >>>> >>>> jar { >>>> include 'com/mycompany/package1/**' >>>> } >>>> >>>> task otherJar(type: Jar) { >>>> from sourceSets.main.classes >>>> include 'com/mycompany/package2/**' >>>> // you will need something to distinguish this jar from the other, >>>> one of: >>>> // baseName = 'myotherjar' >>>> // classifier = 'someclassifier' >>>> // customName = 'myotherjar.jar' >>>> } >>>> >>>> I accept that this would work for me however I was hoping to do >>>> something like this to reduce the amount jar-type tasks: >>>> >>>> def components = [ >>>> [name: 'validate-metadata', title: 'Validate Metadata Component', >>>> pattern: 'com/mycompany/package1/**'] >>>> [name: 'generate-pdf', title: 'Generate PDF Component', pattern: >>>> 'com/mycompany/package2/**'] >>>> [name: 'approve-package', title: 'Approve Package Component', >>>> pattern: 'com/mycompany/package3/**'] >>>> etc.. >>>> ] >>>> >>>> task createComponents { >>>> components.each { c -> >>>> // call some jar-type task.. >>>> } >>>> } >>>> >>>> Is this possible? Would I have to use AntBuilder to do this? >>>> >>>> Cheers >>>> >>>> Mark >>>> >>> >>> >>> >>> -- >>> Learn from the past. Live in the present. Plan for the future. >>> Blog: http://eric-berry.blogspot.com >>> jEdit <http://www.jedit.org> - Programmer's Text Editor >>> Bazaar <http://bazaar.canonical.com> - Version Control for Humans >>> >> >> > > > -- > Learn from the past. Live in the present. Plan for the future. > Blog: http://eric-berry.blogspot.com > jEdit <http://www.jedit.org> - Programmer's Text Editor > Bazaar <http://bazaar.canonical.com> - Version Control for Humans > > > >
