Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use the maven ant task from gradle?

I am trying to publish some artifacts to the maven central repo and since the current version of gradle (0.9-rc2) does not handle pgp I thought I would give it a try by 'porting' the ant xml version while waiting for gradle 1.0 which hopefully will support it out of the box.

I wrote the following in gradle:

def mvn = 
    groovy.xml.NamespaceBuilder.newInstance(ant, 'antlib:org.apache.maven.artifact.ant')

  mvn.mvn {
    arg(value: 'org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file')
    arg(value: '-Durl=file:///tmp/repo2')
    arg(value: '-DrepositoryId=sonatype-nexus-staging')
    arg(value: '-DpomFile=pom.xml')
    arg(value: '-Dfile=myjar.jar')
    arg(value: '-Dfile=-Pgpg')
  }

Unfortunately it is not working and I am getting this:

Cause: Problem: failed to create task or type antlib:org.apache.maven.artifact.ant:mvn
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

I have tried various combinations including adding the following at the top of my script:

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'org.apache.maven:maven-ant-tasks:2.1.1'
  }
}

Any help would be much appreciated

Thanks Yan

like image 656
yan Avatar asked Nov 08 '10 00:11

yan


People also ask

What is Gradle Maven Ant?

Gradle is a Groovy-based build automation tool that is an open-source and builds based on the concepts of Apache Maven and Apache Ant. It is capable of building almost any type of software.

What is Ant in Gradle?

In your build script, a property called ant is provided by Gradle. This is a reference to an AntBuilder instance. This AntBuilder is used to access Ant tasks, types and properties from your build script. There is a very simple mapping from Ant's build.

How do you run an Ant task?

To run the ant build file, open up command prompt and navigate to the folder, where the build. xml resides, and then type ant info. You could also type ant instead. Both will work,because info is the default target in the build file.

Can you use Gradle and Maven together?

Short answer: yes. There's no conflict between having two independent build scripts for the same project, one in Maven and one in Gradle.


1 Answers

I did not find a way to use NamespaceBuilder but I found another way to be able to use the task directly which solves my issue:

repositories {
  mavenCentral()
}

configurations {
    mavenAntTasks
}

dependencies {
    mavenAntTasks 'org.apache.maven:maven-ant-tasks:2.1.1'
}

task hello << {
  ant.taskdef(resource: 'org/apache/maven/artifact/ant/antlib.xml',
              uri: 'antlib:org.apache.maven.artifact.ant',
              classpath: configurations.mavenAntTasks.asPath)
  ant.mvn(...)
}
like image 118
yan Avatar answered Oct 12 '22 15:10

yan