You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/06/10 03:43:22 UTC
svn commit: r189873 - in /maven/components/trunk/maven-artifact-ant: ./
src/main/java/org/apache/maven/artifact/ant/
src/main/resources/org/apache/maven/artifact/ant/
Author: brett
Date: Thu Jun 9 18:43:21 2005
New Revision: 189873
URL: http://svn.apache.org/viewcvs?rev=189873&view=rev
Log:
PR: MNG-460
Submitted by: Nicola Ken Barozzi
Reviewed by: Brett Porter
(applied with modifications)
Replace setProperty by a chained property helper, set up automatically when the POM is first declared.
Removed:
maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/SetPropertyTask.java
Modified:
maven/components/trunk/maven-artifact-ant/sample.build.xml
maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/Pom.java
maven/components/trunk/maven-artifact-ant/src/main/resources/org/apache/maven/artifact/ant/antlib.xml
Modified: maven/components/trunk/maven-artifact-ant/sample.build.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/sample.build.xml?rev=189873&r1=189872&r2=189873&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/sample.build.xml (original)
+++ maven/components/trunk/maven-artifact-ant/sample.build.xml Thu Jun 9 18:43:21 2005
@@ -2,11 +2,9 @@
<target name="test-pom">
<artifact:pom file="pom.xml" id="my.maven.project"/>
- <artifact:setProperty property="my.artifactid" expression="project.artifactId" pomRefId="my.maven.project" />
- <echo>Artifact ID = ${my.artifactid}</echo>
+ <echo>Artifact ID = ${my.maven.project:artifactId}</echo>
- <artifact:setProperty property="my.parent.artifactid" expression="project.parent.artifactId" pomRefId="my.maven.project" />
- <echo>Artifact ID = ${my.parent.artifactid}</echo>
+ <echo>Parent Artifact ID = ${my.maven.project:parent.artifactId}</echo>
</target>
<target name="foo">
Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/Pom.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/Pom.java?rev=189873&r1=189872&r2=189873&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/Pom.java (original)
+++ maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/Pom.java Thu Jun 9 18:43:21 2005
@@ -18,6 +18,7 @@
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.model.Build;
import org.apache.maven.model.CiManagement;
import org.apache.maven.model.DependencyManagement;
@@ -30,25 +31,44 @@
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.PropertyHelper;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Project;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
import java.io.File;
+import java.util.Collections;
/**
- * A POM.
+ * A POM typedef.
+ *
+ * Also an Ant Task that registers a handler called POMPropertyHelper
+ * that intercepts all calls to property value resolution and replies instead
+ * of Ant to properties that start with the id of the pom.
+ *
+ * Example:
+ * ${maven.project:artifactId}
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:nicolaken@apache.org">Nicola Ken Barozzi</a>
* @version $Id$
*/
public class Pom
- extends ProjectComponent
+ extends AbstractArtifactTask
{
private String refid;
+ private String antId;
+
private MavenProject mavenProject;
private File file;
+ /**
+ * The property interceptor.
+ */
+ private final POMPropertyHelper helper = new POMPropertyHelper();
+
public String getRefid()
{
return refid;
@@ -59,6 +79,11 @@
this.refid = refid;
}
+ public void setId( String id )
+ {
+ this.antId = id;
+ }
+
protected Pom getInstance()
{
Pom instance = this;
@@ -81,11 +106,13 @@
void initialise( MavenProjectBuilder builder, ArtifactRepository localRepository )
{
+ // TODO: should this be in execute() too? Would that work when it is used as a type?
if ( file != null )
{
try
{
- mavenProject = builder.build( file, localRepository );
+ // TODO: should the profiles be constructed and passed in here? From Ant, or perhaps settings?
+ mavenProject = builder.build( file, localRepository, Collections.EMPTY_LIST );
}
catch ( ProjectBuildingException e )
{
@@ -235,6 +262,78 @@
public String getId()
{
return getMavenProject().getId();
+ }
+
+ /**
+ * Registers POMPropertyHelper as a property interceptor
+ */
+ public void execute()
+ {
+ ArtifactRepository localRepo = createLocalArtifactRepository();
+ MavenProjectBuilder projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
+ initialise( projectBuilder, localRepo );
+
+ Project project = getProject();
+
+ // Add a reference to this task/type
+ project.addReference( antId, this );
+
+ // Register the property interceptor
+ PropertyHelper phelper = PropertyHelper.getPropertyHelper( project );
+ helper.setNext( phelper.getNext() );
+ helper.setProject( project );
+ phelper.setNext( helper );
+ }
+
+ /**
+ * The property interceptor that handles the calls for "pom." properties
+ */
+ private class POMPropertyHelper
+ extends PropertyHelper
+ {
+ /**
+ * The method that gets called by Ant with every request of property
+ */
+ public Object getPropertyHook( String ns, String name, boolean user )
+ {
+
+ String prefix = antId + ":";
+
+ if ( !name.startsWith( prefix ) )
+ {
+ // pass on to next interceptor
+ return super.getPropertyHook( ns, name, user );
+ }
+ try
+ {
+ // else handle the property resolution
+ String expression = name.substring( prefix.length() );
+ return getPOMValue( "project." + expression );
+
+ }
+ catch ( Exception ex )
+ {
+ ex.printStackTrace();
+ return null;
+ }
+ }
+
+ private Object getPOMValue( String expression )
+ {
+ Object value = null;
+
+ try
+ {
+ value = ReflectionValueExtractor.evaluate( expression, getMavenProject() );
+ }
+ catch ( Exception e )
+ {
+ throw new BuildException( "Error extracting expression from POM", e );
+ }
+
+ return value;
+ }
+
}
}
Modified: maven/components/trunk/maven-artifact-ant/src/main/resources/org/apache/maven/artifact/ant/antlib.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/resources/org/apache/maven/artifact/ant/antlib.xml?rev=189873&r1=189872&r2=189873&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/src/main/resources/org/apache/maven/artifact/ant/antlib.xml (original)
+++ maven/components/trunk/maven-artifact-ant/src/main/resources/org/apache/maven/artifact/ant/antlib.xml Thu Jun 9 18:43:21 2005
@@ -1,15 +1,16 @@
<?xml version="1.0"?>
<antlib>
<!-- Tasks -->
- <typedef name="dependencies" classname="org.apache.maven.artifact.ant.DependenciesTask"/>
- <typedef name="install" classname="org.apache.maven.artifact.ant.InstallTask"/>
- <typedef name="deploy" classname="org.apache.maven.artifact.ant.DeployTask"/>
- <typedef name="setProperty" classname="org.apache.maven.artifact.ant.SetPropertyTask"/>
+ <taskdef name="dependencies" classname="org.apache.maven.artifact.ant.DependenciesTask"/>
+ <taskdef name="install" classname="org.apache.maven.artifact.ant.InstallTask"/>
+ <taskdef name="deploy" classname="org.apache.maven.artifact.ant.DeployTask"/>
<!-- Types -->
<typedef name="localRepository" classname="org.apache.maven.artifact.ant.LocalRepository"/>
<typedef name="remoteRepository" classname="org.apache.maven.artifact.ant.RemoteRepository"/>
<typedef name="authentication" classname="org.apache.maven.artifact.ant.Authentication"/>
<typedef name="proxy" classname="org.apache.maven.artifact.ant.Proxy"/>
- <typedef name="pom" classname="org.apache.maven.artifact.ant.Pom"/>
+
+ <!-- Tasks that are also types -->
+ <taskdef name="pom" classname="org.apache.maven.artifact.ant.Pom"/>
</antlib>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org