Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: Class Loading
-
Labels:None
-
Environment:HideApache Maven 3.0.3 (r1075438; 2011-03-01 04:31:09+1100)
Maven home: /usr/share/maven3
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_AU, platform encoding: UTF-8
OS name: "linux", version: "2.6.35-28-generic", arch: "amd64", family: "unix"ShowApache Maven 3.0.3 (r1075438; 2011-03-01 04:31:09+1100) Maven home: /usr/share/maven3 Java version: 1.6.0_24, vendor: Sun Microsystems Inc. Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre Default locale: en_AU, platform encoding: UTF-8 OS name: "linux", version: "2.6.35-28-generic", arch: "amd64", family: "unix"
-
Complexity:Intermediate
-
Testcase included:yes
-
Number of attachments :
Description
I use a ant tast called listtopath
This is part of:
http://snapshots.repository.codehaus.org/org/codehaus/mojo/was-plugin-anttasks/1.0/
This task is to get around the headache of trying to get $
{maven.compile.classpath} to be passed from maven to the ant mojo.
It has worked like a treat in Maven 2 (I've included the maven 2 example)
but trying to run on maven 3 the CP isn't being passed through.
Basically this is what I do:
I have a simple mojo that takes a reference to the maven project.
It then uses the listtopath task to convert it into a refid that can be used.
eg.
The mojo.
the parameter to pass the maven project
<pluginMetadata>
<mojos>
<mojo>
<goal>ejb-stub-compile</goal>
<call>ejb-stub-compile</call>
<requiresProject>true</requiresProject>
<!--- rest ommitted --//>
<parameter>
<name>mavenproject</name>
<type>org.apache.maven.project.MavenProject</type>
<required>true</required>
<description>This is the pom for the project. Property is
read-only (i.e you can not set it)
</description>
</parameter>
<!--- rest ommitted --//>
Then in my maven-ant build
<project xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property environment="env" value=""/>
<!-- make reference to the listtopath -->
<taskdef name="listtopath" classname="org.codehaus.mojo.wasanttasks.ListToPathTask">
<classpath>
<pathelement
location="$
/.m2/repository/org/codehaus/mojo/was-plugin-anttasks/1.0/was-plugin-anttasks-1.0.jar"/>
</classpath>
</taskdef>
<target name="ejb-stub-compile" depends="init-windows,init-unix">
<echo>Starting ejb stub compilation</echo>
<!-- using the maven project get the classpath -->
<listtopath targetRef="classpath" mavenproject="mavenproject"/>
<!-- convert it into a path and store in ref -->
<pathconvert property="converted.compile.classpath" refid="classpath" dirsep="/"/>
<!-- if the classpath works it should appear here -->
<echo>classpath:$
</echo>
After compiling this I make a local-repository reference and call it
the call in the pom.
<plugin>
<groupId>com.nag.build</groupId>
<artifactId>ejb-stub-compile</artifactId>
<version>1.0.15</version>
<configuration>
<mavenproject implementation="org.apache.maven.project.MavenProject">$
</mavenproject>
<websphere.home>$
</websphere.home>
<input-file>$
<output-file>${project.build.directory}
/$
{project.build.finalName}-tmp.jar</output-file>
</configuration>
<executions>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>ejb-stub-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>was-plugin-anttasks</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
The above worked with maven2 - migrating to Maven3 has caused the listtopath to stop working.
Alternatively there has to be an easier way to pass the cp through to ant!!!!
Note that the ListToTask ant task uses the MavenProject.getArtifacts(...) to work out the compile classpath.
getArtifacts() returns the set of dependencies (including transitive) that were last resolved.
Thus, the set thus then depends one either:
1) What you have set for your mojo’s @requiresDependencyResolution tag.
If you have it set to runtime, it will be the runtime stuff.
2) If you don’t have a @requiresDependencyResolution tag, it will depend
on where in the lifecycle your plugin runs and what plugins were called
before it. For example, if your plugin runs in the validate phase, the
set is most likely going to be null. If you run after compile,
you’ll get the compile stuff, if you run after test, you’ll get the test
stuff.