You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2017/12/20 09:26:42 UTC

[maven-ant-plugin] 24/50: MANT-2: error "maven.repo.local" property in the ant file

This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to annotated tag maven-ant-plugin-2.0
in repository https://gitbox.apache.org/repos/asf/maven-ant-plugin.git

commit b2e67ec2459cb5fb6c4a714ca2b8b70d385ab30a
Author: Vincent Siveton <vs...@apache.org>
AuthorDate: Sat Sep 23 17:17:33 2006 +0000

    MANT-2: error "maven.repo.local" property in the ant file
    
    o created a build.properties as Brett suggested
    o using MavenSettings to populate properties
    o updated build.classpath and build.test.classpath in the build.xml (AntMojo @requiresDependencyResolution test)
    o updated test case
    o improved code lisibility
    
    
    git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-ant-plugin@449275 13f79535-47bb-0310-9956-ffa450edef68
---
 .../apache/maven/plugin/ant/AntBuildWriter.java    | 579 +++++++++++++++------
 .../java/org/apache/maven/plugin/ant/AntMojo.java  |  15 +-
 .../org/apache/maven/plugin/ant/AntMojoTest.java   |  12 +-
 .../plugin/ant/stubs/AntTestMavenProjectStub.java  |  38 +-
 .../maven/plugin/ant/stubs/SettingsStub.java       |  43 ++
 .../unit/ant-test/ant-test-plugin-config.xml       |  21 +-
 .../unit/ant-test/src/main/resources/main.txt      |   1 +
 .../unit/ant-test/src/test/resources/test.txt      |   1 +
 8 files changed, 521 insertions(+), 189 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
index a745244..a728481 100644
--- a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
+++ b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
@@ -17,6 +17,7 @@ package org.apache.maven.plugin.ant;
  */
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.text.DateFormat;
@@ -26,11 +27,13 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.Properties;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.Resource;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
 import org.apache.maven.wagon.PathUtils;
 import org.apache.tools.ant.Main;
 import org.codehaus.plexus.util.IOUtil;
@@ -50,20 +53,35 @@ public class AntBuildWriter
     /**
      * The default line indenter
      */
-    protected final static int DEFAULT_INDENTATION_SIZE = 2;
+    protected static final int DEFAULT_INDENTATION_SIZE = 2;
+
+    /**
+     * The default build file name (build.xml)
+     * @see Main#DEFAULT_BUILD_FILENAME
+     */
+    protected static final String DEFAULT_BUILD_FILENAME = Main.DEFAULT_BUILD_FILENAME;
+
+    /**
+     * The default build properties file name
+     */
+    protected static final String DEFAULT_PROPERTIES_FILENAME = "build.properties";
 
     private MavenProject project;
 
     private File localRepository;
 
+    private Settings settings;
+
     /**
      * @param project
      * @param localRepository
+     * @param settings
      */
-    public AntBuildWriter( MavenProject project, File localRepository )
+    public AntBuildWriter( MavenProject project, File localRepository, Settings settings )
     {
         this.project = project;
         this.localRepository = localRepository;
+        this.settings = settings;
     }
 
     // ----------------------------------------------------------------------
@@ -74,7 +92,7 @@ public class AntBuildWriter
         throws IOException
     {
         // TODO: parameter
-        FileWriter w = new FileWriter( new File( project.getBasedir(), Main.DEFAULT_BUILD_FILENAME ) );
+        FileWriter w = new FileWriter( new File( project.getBasedir(), DEFAULT_BUILD_FILENAME ) );
 
         XMLWriter writer = new PrettyPrintXMLWriter( w, StringUtils.repeat( " ", DEFAULT_INDENTATION_SIZE ), "UTF-8",
                                                      null );
@@ -122,12 +140,6 @@ public class AntBuildWriter
         writeCompileTarget( writer, compileSourceRoots );
 
         // ----------------------------------------------------------------------
-        // <target name="jar" />
-        // ----------------------------------------------------------------------
-        // TODO: what if type is not JAR?
-        writeJarTarget( writer );
-
-        // ----------------------------------------------------------------------
         // <target name="compile-tests" />
         // ----------------------------------------------------------------------
 
@@ -141,6 +153,12 @@ public class AntBuildWriter
         writeTestTargets( writer, testCompileSourceRoots );
 
         // ----------------------------------------------------------------------
+        // <target name="jar" />
+        // ----------------------------------------------------------------------
+        // TODO: what if type is not JAR?
+        writeJarTarget( writer );
+
+        // ----------------------------------------------------------------------
         // <target name="get-deps" />
         // ----------------------------------------------------------------------
         writeGetDepsTarget( writer );
@@ -150,6 +168,280 @@ public class AntBuildWriter
         IOUtil.close( w );
     }
 
+    protected void writeBuildProperties()
+        throws IOException
+    {
+        FileOutputStream os = new FileOutputStream( new File( project.getBasedir(), DEFAULT_PROPERTIES_FILENAME ) );
+        Properties properties = new Properties();
+
+        // ----------------------------------------------------------------------
+        // Build properties
+        // ----------------------------------------------------------------------
+
+        addProperty( properties, "maven.build.finalName", PathUtils.toRelative( project.getBasedir(), project
+            .getBuild().getFinalName() ) );
+
+        // target
+        addProperty( properties, "maven.build.dir", PathUtils.toRelative( project.getBasedir(), project.getBuild()
+            .getDirectory() ) );
+
+        // ${maven.build.dir}/classes
+        addProperty( properties, "maven.build.outputDir", "${maven.build.dir}/"
+            + PathUtils.toRelative( new File( project.getBasedir(), properties.getProperty( "maven.build.dir" ) ),
+                                    project.getBuild().getOutputDirectory() ) );
+        // src/main/java
+        if ( !project.getCompileSourceRoots().isEmpty() )
+        {
+            String[] compileSourceRoots = (String[]) project.getCompileSourceRoots().toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRoots.length; i++ )
+            {
+                addProperty( properties, "maven.build.srcDir." + i, PathUtils.toRelative( project.getBasedir(),
+                                                                                          compileSourceRoots[i] ) );
+            }
+        }
+        // src/main/resources
+        if ( project.getBuild().getResources() != null )
+        {
+            Resource[] array = (Resource[]) project.getBuild().getResources().toArray( new Resource[0] );
+            for ( int i = 0; i < array.length; i++ )
+            {
+                addProperty( properties, "maven.build.resourceDir." + i, PathUtils.toRelative( project.getBasedir(),
+                                                                                               array[i].getDirectory() ) );
+            }
+        }
+
+        // ${maven.build.dir}/test-classes
+        addProperty( properties, "maven.build.testOutputDir", "${maven.build.dir}/"
+            + PathUtils.toRelative( new File( project.getBasedir(), properties.getProperty( "maven.build.dir" ) ),
+                                    project.getBuild().getTestOutputDirectory() ) );
+        // src/test/java
+        if ( !project.getTestCompileSourceRoots().isEmpty() )
+        {
+            String[] compileSourceRoots = (String[]) project.getTestCompileSourceRoots().toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRoots.length; i++ )
+            {
+                addProperty( properties, "maven.build.testDir." + i, PathUtils.toRelative( project.getBasedir(),
+                                                                                           compileSourceRoots[i] ) );
+            }
+        }
+        // src/test/resources
+        if ( project.getBuild().getTestResources() != null )
+        {
+            Resource[] array = (Resource[]) project.getBuild().getTestResources().toArray( new Resource[0] );
+            for ( int i = 0; i < array.length; i++ )
+            {
+                addProperty( properties, "maven.build.testResourceDir." + i, PathUtils
+                    .toRelative( project.getBasedir(), array[i].getDirectory() ) );
+            }
+        }
+
+        // ----------------------------------------------------------------------
+        // Settings properties
+        // ----------------------------------------------------------------------
+
+        addProperty( properties, "maven.settings.offline", String.valueOf( settings.isOffline() ) );
+        addProperty( properties, "maven.settings.interactiveMode", String.valueOf( settings.isInteractiveMode() ) );
+        addProperty( properties, "maven.repo.local", localRepository.getAbsolutePath() );
+
+        properties.store( os, "Generated by Maven Ant Plugin" );
+    }
+
+    private void writeProperties( XMLWriter writer )
+    {
+        // TODO: optional in m1
+        // TODO: USD properties
+        AntBuildWriterUtil.writeCommentText( writer, "Build environnement properties", 1 );
+
+        // ----------------------------------------------------------------------
+        // File properties to override local properties
+        // ----------------------------------------------------------------------
+
+        writer.startElement( "property" );
+        writer.addAttribute( "file", "${user.home}/.m2/maven.properties" );
+        writer.endElement(); // property
+
+        writer.startElement( "property" );
+        writer.addAttribute( "file", "build.properties" );
+        writer.endElement(); // property
+
+        // ----------------------------------------------------------------------
+        // Build properties
+        // ----------------------------------------------------------------------
+
+        AntBuildWriterUtil.writeLineBreak( writer, 2, 1 );
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.build.finalName" );
+        writer.addAttribute( "value", project.getBuild().getFinalName() );
+        writer.endElement(); // property
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.build.dir" );
+        writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), project.getBuild().getDirectory() ) );
+        writer.endElement(); // property
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.build.outputDir" );
+        writer.addAttribute( "value", "${maven.build.dir}/"
+            + PathUtils.toRelative( new File( project.getBuild().getDirectory() ), project.getBuild()
+                .getOutputDirectory() ) );
+        writer.endElement(); // property
+
+        if ( !project.getCompileSourceRoots().isEmpty() )
+        {
+            String[] compileSourceRoots = (String[]) project.getCompileSourceRoots().toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRoots.length; i++ )
+            {
+                writer.startElement( "property" );
+                writer.addAttribute( "name", "maven.build.srcDir." + i );
+                writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), compileSourceRoots[i] ) );
+                writer.endElement(); // property
+            }
+        }
+
+        if ( project.getBuild().getResources() != null )
+        {
+            Resource[] array = (Resource[]) project.getBuild().getResources().toArray( new Resource[0] );
+            for ( int i = 0; i < array.length; i++ )
+            {
+                writer.startElement( "property" );
+                writer.addAttribute( "name", "maven.build.resourceDir." + i );
+                writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), array[i].getDirectory() ) );
+                writer.endElement(); // property
+            }
+        }
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.build.testOutputDir" );
+        writer.addAttribute( "value", "${maven.build.dir}/"
+            + PathUtils.toRelative( new File( project.getBuild().getDirectory() ), project.getBuild()
+                .getTestOutputDirectory() ) );
+        writer.endElement(); // property
+
+        if ( !project.getTestCompileSourceRoots().isEmpty() )
+        {
+            String[] compileSourceRoots = (String[]) project.getTestCompileSourceRoots().toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRoots.length; i++ )
+            {
+                writer.startElement( "property" );
+                writer.addAttribute( "name", "maven.build.testDir." + i );
+                writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), compileSourceRoots[i] ) );
+                writer.endElement(); // property
+            }
+        }
+
+        if ( project.getBuild().getResources() != null )
+        {
+            Resource[] array = (Resource[]) project.getBuild().getResources().toArray( new Resource[0] );
+            for ( int i = 0; i < array.length; i++ )
+            {
+                writer.startElement( "property" );
+                writer.addAttribute( "name", "maven.build.testResourceDir." + i );
+                writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), array[i].getDirectory() ) );
+                writer.endElement(); // property
+            }
+        }
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.test.reports" );
+        writer.addAttribute( "value", "${maven.build.dir}/test-reports" );
+        writer.endElement(); // property
+
+        // ----------------------------------------------------------------------
+        // Setting properties
+        // ----------------------------------------------------------------------
+
+        AntBuildWriterUtil.writeLineBreak( writer, 2, 1 );
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.repo.local" );
+        writer.addAttribute( "value", localRepository.getAbsolutePath() );
+        writer.endElement(); // property
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.settings.offline" );
+        writer.addAttribute( "value", String.valueOf( settings.isOffline() ) );
+        writer.endElement(); // property
+
+        writer.startElement( "property" );
+        writer.addAttribute( "name", "maven.settings.interactiveMode" );
+        writer.addAttribute( "value", String.valueOf( settings.isInteractiveMode() ) );
+        writer.endElement(); // property
+
+        AntBuildWriterUtil.writeLineBreak( writer );
+    }
+
+    private void writeBuildPathDefinition( XMLWriter writer )
+    {
+        AntBuildWriterUtil.writeCommentText( writer, "Defining classpaths", 1 );
+
+        writer.startElement( "path" );
+        writer.addAttribute( "id", "build.classpath" );
+        writer.startElement( "fileset" );
+        writer.addAttribute( "dir", "${maven.repo.local}" );
+
+        for ( Iterator i = project.getCompileArtifacts().iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            writer.startElement( "include" );
+            writer.addAttribute( "name", PathUtils.toRelative( localRepository, artifact.getFile().getPath() ) );
+            writer.endElement(); // include
+        }
+        writer.endElement(); // fileset
+        writer.endElement(); // path
+
+        writer.startElement( "path" );
+        writer.addAttribute( "id", "build.test.classpath" );
+        writer.startElement( "fileset" );
+        writer.addAttribute( "dir", "${maven.repo.local}" );
+
+        for ( Iterator i = project.getTestArtifacts().iterator(); i.hasNext(); )
+        {
+            Artifact artifact = (Artifact) i.next();
+            writer.startElement( "include" );
+            writer.addAttribute( "name", PathUtils.toRelative( localRepository, artifact.getFile().getPath() ) );
+            writer.endElement(); // include
+        }
+        writer.endElement(); // fileset
+        writer.endElement(); // path
+
+        AntBuildWriterUtil.writeLineBreak( writer );
+    }
+
+    private void writeCleanTarget( XMLWriter writer )
+    {
+        AntBuildWriterUtil.writeCommentText( writer, "Cleaning up target", 1 );
+
+        writer.startElement( "target" );
+        writer.addAttribute( "name", "clean" );
+        writer.addAttribute( "description", "Clean the output directory" );
+
+        writer.startElement( "delete" );
+        writer.addAttribute( "dir", "${maven.build.dir}" );
+        writer.endElement(); // delete
+
+        writer.endElement(); // target
+
+        AntBuildWriterUtil.writeLineBreak( writer );
+    }
+
+    private void writeCompileTarget( XMLWriter writer, List compileSourceRoots )
+    {
+        AntBuildWriterUtil.writeCommentText( writer, "Compilation target", 1 );
+
+        writer.startElement( "target" );
+        writer.addAttribute( "name", "compile" );
+        writer.addAttribute( "depends", "get-deps" );
+        writer.addAttribute( "description", "Compile the code" );
+
+        writeCompileTasks( writer, project.getBasedir(), "${maven.build.outputDir}", compileSourceRoots, project
+            .getBuild().getResources(), null, false );
+
+        writer.endElement(); // target
+
+        AntBuildWriterUtil.writeLineBreak( writer );
+    }
+
     private void writeCompileTestsTarget( XMLWriter writer, List testCompileSourceRoots )
     {
         AntBuildWriterUtil.writeCommentText( writer, "Test-compilation target", 1 );
@@ -160,8 +452,8 @@ public class AntBuildWriter
         AntBuildWriterUtil.addWrapAttribute( writer, "target", "description", "Compile the test code", 2 );
         AntBuildWriterUtil.addWrapAttribute( writer, "target", "if", "junit.present", 2 );
 
-        writeCompileTasks( writer, project.getBasedir(), "${maven.test.output}", testCompileSourceRoots, project
-            .getBuild().getTestResources(), "${maven.build.output}" );
+        writeCompileTasks( writer, project.getBasedir(), "${maven.build.testOutputDir}", testCompileSourceRoots,
+                           project.getBuild().getTestResources(), "${maven.build.outputDir}", true );
 
         writer.endElement(); // target
 
@@ -207,23 +499,24 @@ public class AntBuildWriter
 
             writer.startElement( "classpath" );
             writer.startElement( "path" );
-            writer.addAttribute( "refid", "build.classpath" );
+            writer.addAttribute( "refid", "build.test.classpath" );
             writer.endElement(); // path
             writer.startElement( "pathelement" );
-            writer.addAttribute( "location", "${maven.build.output}" );
+            writer.addAttribute( "location", "${maven.build.outputDir}" );
             writer.endElement(); // pathelement
             writer.startElement( "pathelement" );
-            writer.addAttribute( "location", "${maven.test.output}" );
+            writer.addAttribute( "location", "${maven.build.testOutputDir}" );
             writer.endElement(); // pathelement
             writer.endElement(); // classpath
 
             writer.startElement( "batchtest" );
             writer.addAttribute( "todir", "${maven.test.reports}" );
-            for ( Iterator i = testCompileSourceRoots.iterator(); i.hasNext(); )
+
+            String[] compileSourceRoots = (String[]) testCompileSourceRoots.toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRoots.length; i++ )
             {
                 writer.startElement( "fileset" );
-                String testSrcDir = (String) i.next();
-                writer.addAttribute( "dir", PathUtils.toRelative( project.getBasedir(), testSrcDir ) );
+                writer.addAttribute( "dir", "${maven.build.testDir." + i + "}" );
                 /* TODO: need to get these from the test plugin somehow?
                  UnitTest unitTest = project.getBuild().getUnitTest();
                  writeIncludesExcludes( writer, unitTest.getIncludes(), unitTest.getExcludes() );
@@ -285,8 +578,8 @@ public class AntBuildWriter
         writer.addAttribute( "description", "Create the JAR" );
 
         writer.startElement( "jar" );
-        writer.addAttribute( "jarfile", "${maven.build.directory}/${maven.build.final.name}.jar" );
-        AntBuildWriterUtil.addWrapAttribute( writer, "jar", "basedir", "${maven.build.output}", 3 );
+        writer.addAttribute( "jarfile", "${maven.build.dir}/${maven.build.finalName}.jar" );
+        AntBuildWriterUtil.addWrapAttribute( writer, "jar", "basedir", "${maven.build.outputDir}", 3 );
         AntBuildWriterUtil.addWrapAttribute( writer, "jar", "excludes", "**/package.html", 3 );
         writer.endElement(); // jar
 
@@ -295,42 +588,9 @@ public class AntBuildWriter
         AntBuildWriterUtil.writeLineBreak( writer );
     }
 
-    private void writeCleanTarget( XMLWriter writer )
-    {
-        AntBuildWriterUtil.writeCommentText( writer, "Cleaning up target", 1 );
-
-        writer.startElement( "target" );
-        writer.addAttribute( "name", "clean" );
-        writer.addAttribute( "description", "Clean the output directory" );
-
-        writer.startElement( "delete" );
-        writer.addAttribute( "dir", "${maven.build.directory}" );
-        writer.endElement(); // delete
-
-        writer.endElement(); // target
-
-        AntBuildWriterUtil.writeLineBreak( writer );
-    }
-
-    private void writeCompileTarget( XMLWriter writer, List compileSourceRoots )
-    {
-        AntBuildWriterUtil.writeCommentText( writer, "Compilation target", 1 );
-
-        writer.startElement( "target" );
-        writer.addAttribute( "name", "compile" );
-        writer.addAttribute( "depends", "get-deps" );
-        writer.addAttribute( "description", "Compile the code" );
-
-        writeCompileTasks( writer, project.getBasedir(), "${maven.build.output}", compileSourceRoots, project
-            .getBuild().getResources(), null );
-
-        writer.endElement(); // target
-
-        AntBuildWriterUtil.writeLineBreak( writer );
-    }
-
     private static void writeCompileTasks( XMLWriter writer, File basedir, String outputDirectory,
-                                          List compileSourceRoots, List resources, String additionalClassesDirectory )
+                                          List compileSourceRoots, List resources, String additionalClassesDirectory,
+                                          boolean isTest )
     {
         writer.startElement( "mkdir" );
         writer.addAttribute( "dir", outputDirectory );
@@ -345,13 +605,19 @@ public class AntBuildWriter
             AntBuildWriterUtil.addWrapAttribute( writer, "javac", "deprecation", "true", 3 ); // TODO: use compiler setting
             AntBuildWriterUtil.addWrapAttribute( writer, "javac", "optimize", "false", 3 ); // TODO: use compiler setting
 
-            for ( Iterator i = compileSourceRoots.iterator(); i.hasNext(); )
+            String[] compileSourceRootsArray = (String[]) compileSourceRoots.toArray( new String[0] );
+            for ( int i = 0; i < compileSourceRootsArray.length; i++ )
             {
-                String srcDir = (String) i.next();
-
                 writer.startElement( "src" );
                 writer.startElement( "pathelement" );
-                writer.addAttribute( "location", PathUtils.toRelative( basedir, srcDir ) );
+                if ( isTest )
+                {
+                    writer.addAttribute( "location", "${maven.build.testDir." + i + "}" );
+                }
+                else
+                {
+                    writer.addAttribute( "location", "${maven.build.srcDir." + i + "}" );
+                }
                 writer.endElement(); // pathelement
                 writer.endElement(); // src
             }
@@ -359,28 +625,42 @@ public class AntBuildWriter
             if ( additionalClassesDirectory == null )
             {
                 writer.startElement( "classpath" );
-                writer.addAttribute( "refid", "build.classpath" );
+                if ( isTest )
+                {
+                    writer.addAttribute( "refid", "build.test.classpath" );
+                }
+                else
+                {
+                    writer.addAttribute( "refid", "build.classpath" );
+                }
                 writer.endElement(); // classpath
             }
             else
             {
                 writer.startElement( "classpath" );
                 writer.startElement( "path" );
-                writer.addAttribute( "refid", "build.classpath" );
+                if ( isTest )
+                {
+                    writer.addAttribute( "refid", "build.test.classpath" );
+                }
+                else
+                {
+                    writer.addAttribute( "refid", "build.classpath" );
+                }
                 writer.endElement(); // path
                 writer.startElement( "pathelement" );
                 writer.addAttribute( "location", additionalClassesDirectory );
                 writer.endElement(); // pathelement
                 writer.endElement(); // classpath
-
             }
 
             writer.endElement(); // javac
         }
 
-        for ( Iterator i = resources.iterator(); i.hasNext(); )
+        Resource[] array = (Resource[]) resources.toArray( new Resource[0] );
+        for ( int i = 0; i < array.length; i++ )
         {
-            Resource resource = (Resource) i.next();
+            Resource resource = array[i];
 
             if ( new File( resource.getDirectory() ).exists() )
             {
@@ -398,7 +678,14 @@ public class AntBuildWriter
                 writer.addAttribute( "todir", outputDir );
 
                 writer.startElement( "fileset" );
-                writer.addAttribute( "dir", PathUtils.toRelative( basedir, resource.getDirectory() ) );
+                if ( isTest )
+                {
+                    writer.addAttribute( "dir", "${maven.build.testResourceDir." + i + "}" );
+                }
+                else
+                {
+                    writer.addAttribute( "dir", "${maven.build.resourceDir." + i + "}" );
+                }
 
                 writeIncludesExcludes( writer, resource.getIncludes(), resource.getExcludes() );
 
@@ -409,42 +696,9 @@ public class AntBuildWriter
         }
     }
 
-    private static List removeEmptyCompileSourceRoots( List compileSourceRoots )
-    {
-        List newCompileSourceRootsList = new ArrayList();
-        if ( compileSourceRoots != null )
-        {
-            // copy as I may be modifying it
-            for ( Iterator i = compileSourceRoots.iterator(); i.hasNext(); )
-            {
-                String srcDir = (String) i.next();
-                if ( new File( srcDir ).exists() )
-                {
-                    newCompileSourceRootsList.add( srcDir );
-                }
-            }
-        }
-        return newCompileSourceRootsList;
-    }
-
-    private static void writeIncludesExcludes( XMLWriter writer, List includes, List excludes )
-    {
-        for ( Iterator i = includes.iterator(); i.hasNext(); )
-        {
-            String include = (String) i.next();
-            writer.startElement( "include" );
-            writer.addAttribute( "name", include );
-            writer.endElement(); // include
-        }
-        for ( Iterator i = excludes.iterator(); i.hasNext(); )
-        {
-            String exclude = (String) i.next();
-            writer.startElement( "exclude" );
-            writer.addAttribute( "name", exclude );
-            writer.endElement(); // exclude
-        }
-    }
-
+    /**
+     * @param writer
+     */
     private void writeGetDepsTarget( XMLWriter writer )
     {
         AntBuildWriterUtil.writeCommentText( writer, "Download dependencies target", 1 );
@@ -455,8 +709,8 @@ public class AntBuildWriter
         writer.startElement( "condition" );
         writer.addAttribute( "property", "maven.mode.offline" );
         writer.startElement( "equals" );
-        writer.addAttribute( "arg1", "${build.sysclasspath}" );
-        writer.addAttribute( "arg2", "only" );
+        writer.addAttribute( "arg1", "${maven.settings.offline}" );
+        writer.addAttribute( "arg2", "true" );
         writer.endElement(); // equals
         writer.endElement(); // condition
         writer.endElement(); // target
@@ -474,8 +728,7 @@ public class AntBuildWriter
         writer.endElement(); // mkdir
 
         // TODO: proxy - probably better to use wagon!
-
-        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+        for ( Iterator i = project.getTestArtifacts().iterator(); i.hasNext(); )
         {
             Artifact artifact = (Artifact) i.next();
 
@@ -508,78 +761,54 @@ public class AntBuildWriter
         AntBuildWriterUtil.writeLineBreak( writer );
     }
 
-    private void writeBuildPathDefinition( XMLWriter writer )
-    {
-        AntBuildWriterUtil.writeCommentText( writer, "Defining classpaths", 1 );
+    // ----------------------------------------------------------------------
+    // Convenience methods
+    // ----------------------------------------------------------------------
 
-        writer.startElement( "path" );
-        writer.addAttribute( "id", "build.classpath" );
-        writer.startElement( "fileset" );
-        writer.addAttribute( "dir", "${maven.repo.local}" );
-        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+    /**
+     * @param compileSourceRoots
+     * @return not null list
+     */
+    private static List removeEmptyCompileSourceRoots( List compileSourceRoots )
+    {
+        List newCompileSourceRootsList = new ArrayList();
+        if ( compileSourceRoots != null )
         {
-            Artifact artifact = (Artifact) i.next();
-            writer.startElement( "include" );
-            writer.addAttribute( "name", PathUtils.toRelative( localRepository, artifact.getFile().getPath() ) );
-            writer.endElement(); // include
+            // copy as I may be modifying it
+            for ( Iterator i = compileSourceRoots.iterator(); i.hasNext(); )
+            {
+                String srcDir = (String) i.next();
+                if ( new File( srcDir ).exists() )
+                {
+                    newCompileSourceRootsList.add( srcDir );
+                }
+            }
         }
-        writer.endElement(); // fileset
-        writer.endElement(); // path
 
-        AntBuildWriterUtil.writeLineBreak( writer );
+        return newCompileSourceRootsList;
     }
 
-    private void writeProperties( XMLWriter writer )
+    /**
+     * @param writer
+     * @param includes
+     * @param excludes
+     */
+    private static void writeIncludesExcludes( XMLWriter writer, List includes, List excludes )
     {
-        // TODO: optional in m1
-        // TODO: USD properties
-        AntBuildWriterUtil.writeCommentText( writer, "Build environnement properties", 1 );
-
-        writer.startElement( "property" );
-        writer.addAttribute( "file", "${user.home}/.m2/maven.properties" );
-        writer.endElement(); // property
-
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.build.output" );
-        writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), project.getBuild()
-            .getOutputDirectory() ) );
-        writer.endElement(); // property
-
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.build.directory" );
-        writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), project.getBuild().getDirectory() ) );
-        writer.endElement(); // property
-
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.build.final.name" );
-        writer.addAttribute( "value", project.getBuild().getFinalName() );
-        writer.endElement(); // property
-
-        // TODO: property?
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.test.reports" );
-        writer.addAttribute( "value", "${maven.build.directory}/test-reports" );
-        writer.endElement(); // property
-
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.test.output" );
-        writer.addAttribute( "value", PathUtils.toRelative( project.getBasedir(), project.getBuild()
-            .getTestOutputDirectory() ) );
-        writer.endElement(); // property
-
-        writer.startElement( "property" );
-        writer.addAttribute( "name", "maven.repo.local" );
-        writer.addAttribute( "value", "${user.home}/.m2/repository" );
-        writer.endElement(); // property
-
-        /* TODO: offline setting
-         writer.startElement( "property" );
-         writer.addAttribute( "name", "maven.mode.offline" );
-         writer.addAttribute( "value", project.getBuild().getOutput() );
-         writer.endElement(); // property
-         */
-
-        AntBuildWriterUtil.writeLineBreak( writer );
+        for ( Iterator i = includes.iterator(); i.hasNext(); )
+        {
+            String include = (String) i.next();
+            writer.startElement( "include" );
+            writer.addAttribute( "name", include );
+            writer.endElement(); // include
+        }
+        for ( Iterator i = excludes.iterator(); i.hasNext(); )
+        {
+            String exclude = (String) i.next();
+            writer.startElement( "exclude" );
+            writer.addAttribute( "name", exclude );
+            writer.endElement(); // exclude
+        }
     }
 
     /**
@@ -613,4 +842,16 @@ public class AntBuildWriter
 
         AntBuildWriterUtil.writeLineBreak( writer );
     }
+
+    /**
+     * Put a property in properties defined by a name and a value
+     *
+     * @param properties
+     * @param name
+     * @param value
+     */
+    private static void addProperty( Properties properties, String name, String value )
+    {
+        properties.put( name, StringUtils.isNotEmpty( value ) ? value : "" );
+    }
 }
diff --git a/src/main/java/org/apache/maven/plugin/ant/AntMojo.java b/src/main/java/org/apache/maven/plugin/ant/AntMojo.java
index bb5cf87..f8cb032 100644
--- a/src/main/java/org/apache/maven/plugin/ant/AntMojo.java
+++ b/src/main/java/org/apache/maven/plugin/ant/AntMojo.java
@@ -20,6 +20,7 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,7 +31,7 @@ import java.io.IOException;
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @version $Id$
  * @goal ant
- * @requiresDependencyResolution
+ * @requiresDependencyResolution test
  * @todo change this to use the artifact ant tasks instead of :get
  */
 public class AntMojo
@@ -53,6 +54,15 @@ public class AntMojo
     private ArtifactRepository localRepository;
 
     /**
+     * The current user system settings for use in Maven.
+     *
+     * @parameter expression="${settings}"
+     * @required
+     * @readonly
+     */
+    private Settings settings;
+
+    /**
      * @see org.apache.maven.plugin.Mojo#execute()
      */
     public void execute()
@@ -60,11 +70,12 @@ public class AntMojo
     {
         // TODO: read back previous
 
-        AntBuildWriter antBuildWriter = new AntBuildWriter( project, new File( localRepository.getBasedir() ) );
+        AntBuildWriter antBuildWriter = new AntBuildWriter( project, new File( localRepository.getBasedir() ), settings );
 
         try
         {
             antBuildWriter.writeBuildXml();
+            antBuildWriter.writeBuildProperties();
         }
         catch ( IOException e )
         {
diff --git a/src/test/java/org/apache/maven/plugin/ant/AntMojoTest.java b/src/test/java/org/apache/maven/plugin/ant/AntMojoTest.java
index bf1e6b8..0e7a05e 100644
--- a/src/test/java/org/apache/maven/plugin/ant/AntMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/ant/AntMojoTest.java
@@ -17,9 +17,10 @@ package org.apache.maven.plugin.ant;
  */
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.util.Properties;
 
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.tools.ant.Main;
 
 /**
  * Class to test Ant plugin
@@ -62,13 +63,20 @@ public class AntMojoTest
         mojo.execute();
 
         File antBasedir = new File( getBasedir(), "target/test/unit/ant-test/" );
-        File antBuild = new File( antBasedir, Main.DEFAULT_BUILD_FILENAME );
+        File antBuild = new File( antBasedir, AntBuildWriter.DEFAULT_BUILD_FILENAME );
         assertTrue( antBuild.exists() );
+        File antProperties = new File( antBasedir, AntBuildWriter.DEFAULT_PROPERTIES_FILENAME );
+        assertTrue( antProperties.exists() );
 
         AntWrapper.invoke( antBuild );
 
         assertTrue( new File( antBasedir, "target" ).exists() );
         assertTrue( new File( antBasedir, "target/classes" ).exists() );
         assertTrue( new File( antBasedir, "target/ant-plugin-test.jar" ).exists() );
+
+        Properties properties = new Properties();
+        properties.load( new FileInputStream( new File( getBasedir(), "target/test/unit/ant-test/build.properties" ) ) );
+        String repo = properties.getProperty( "maven.repo.local" );
+        assertTrue( repo.equals( new File( getBasedir(), "target/local-repo" ).getAbsolutePath() ) );
     }
 }
diff --git a/src/test/java/org/apache/maven/plugin/ant/stubs/AntTestMavenProjectStub.java b/src/test/java/org/apache/maven/plugin/ant/stubs/AntTestMavenProjectStub.java
index 72c4bf3..6a5f381 100644
--- a/src/test/java/org/apache/maven/plugin/ant/stubs/AntTestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugin/ant/stubs/AntTestMavenProjectStub.java
@@ -20,7 +20,6 @@ import java.io.File;
 import java.io.FileReader;
 import java.util.Collections;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
@@ -29,6 +28,7 @@ import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
+import org.apache.maven.model.Resource;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 import org.codehaus.plexus.PlexusTestCase;
@@ -47,13 +47,14 @@ public class AntTestMavenProjectStub
      */
     public AntTestMavenProjectStub()
     {
+        File antTestDir = new File( PlexusTestCase.getBasedir() + "/src/test/resources/unit/ant-test/" );
+
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
         try
         {
-            model = pomReader.read( new FileReader( new File( PlexusTestCase.getBasedir()
-                + "/src/test/resources/unit/ant-test/ant-test-plugin-config.xml" ) ) );
+            model = pomReader.read( new FileReader( new File( antTestDir, "ant-test-plugin-config.xml" ) ) );
             setModel( model );
         }
         catch ( Exception e )
@@ -69,10 +70,22 @@ public class AntTestMavenProjectStub
         setPackaging( model.getPackaging() );
 
         build = new Build();
+        Resource resource = new Resource();
+
         build.setFinalName( model.getArtifactId() );
         build.setDirectory( getBasedir().getAbsolutePath() + "/target" );
+
+        build.setSourceDirectory( antTestDir + "/src/main/java" );
+        resource.setDirectory( antTestDir + "/src/main/resources" );
+        build.setResources( Collections.singletonList( resource ) );
         build.setOutputDirectory( getBasedir().getAbsolutePath() + "/target/classes" );
+
+        build.setTestSourceDirectory( antTestDir + "/src/test/java" );
+        resource = new Resource();
+        resource.setDirectory( antTestDir + "/src/test/resources" );
+        build.setTestResources( Collections.singletonList( resource ) );
         build.setTestOutputDirectory( getBasedir().getAbsolutePath() + "/target/test-classes" );
+
         setBuild( build );
     }
 
@@ -118,16 +131,29 @@ public class AntTestMavenProjectStub
     }
 
     /**
-     * @see org.apache.maven.project.MavenProject#getArtifacts()
+     * @see org.apache.maven.project.MavenProject#getCompileArtifacts()
+     */
+    public List getCompileArtifacts()
+    {
+        Artifact junit = new DefaultArtifact( "junit", "junit", VersionRange.createFromVersion( "3.8.1" ),
+                                              Artifact.SCOPE_TEST, "jar", null, new DefaultArtifactHandler( "jar" ),
+                                              false );
+        junit.setFile( new File( "junit/junit/3.8.1/junit-3.8.1.jar" ) );
+
+        return Collections.singletonList( junit );
+    }
+
+    /**
+     * @see org.apache.maven.project.MavenProject#getTestArtifacts()
      */
-    public Set getArtifacts()
+    public List getTestArtifacts()
     {
         Artifact junit = new DefaultArtifact( "junit", "junit", VersionRange.createFromVersion( "3.8.1" ),
                                               Artifact.SCOPE_TEST, "jar", null, new DefaultArtifactHandler( "jar" ),
                                               false );
         junit.setFile( new File( "junit/junit/3.8.1/junit-3.8.1.jar" ) );
 
-        return Collections.singleton( junit );
+        return Collections.singletonList( junit );
     }
 
     /**
diff --git a/src/test/java/org/apache/maven/plugin/ant/stubs/SettingsStub.java b/src/test/java/org/apache/maven/plugin/ant/stubs/SettingsStub.java
new file mode 100644
index 0000000..40d86dc
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugin/ant/stubs/SettingsStub.java
@@ -0,0 +1,43 @@
+package org.apache.maven.plugin.ant.stubs;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.settings.Settings;
+
+/**
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class SettingsStub
+    extends Settings
+{
+    /**
+     * @see org.apache.maven.settings.Settings#isOffline()
+     */
+    public boolean isOffline()
+    {
+        return false;
+    }
+
+    /**
+     * @see org.apache.maven.settings.Settings#isInteractiveMode()
+     */
+    public boolean isInteractiveMode()
+    {
+        return true;
+    }
+}
diff --git a/src/test/resources/unit/ant-test/ant-test-plugin-config.xml b/src/test/resources/unit/ant-test/ant-test-plugin-config.xml
index 1ff7218..1c51725 100644
--- a/src/test/resources/unit/ant-test/ant-test-plugin-config.xml
+++ b/src/test/resources/unit/ant-test/ant-test-plugin-config.xml
@@ -18,14 +18,14 @@
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>ant-plugin.test</groupId>
-  <artifactId>ant-plugin-test</artifactId>
-  <packaging>jar</packaging>
-  <version>1.0-SNAPSHOT</version>
-  <inceptionYear>2006</inceptionYear>
-  <name>Maven Ant Plugin Test</name>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>ant-plugin.test</groupId>
+  <artifactId>ant-plugin-test</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <inceptionYear>2006</inceptionYear>
+  <name>Maven Ant Plugin Test</name>
   <url>http://maven.apache.org</url>
   <dependencies>
     <dependency>
@@ -42,9 +42,10 @@
         <artifactId>maven-ant-plugin</artifactId>
         <configuration>
           <project implementation="org.apache.maven.plugin.ant.stubs.AntTestMavenProjectStub"/>
+          <settings implementation="org.apache.maven.plugin.ant.stubs.SettingsStub"/>
           <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
-  </build>
-</project>
+  </build>
+</project>
diff --git a/src/test/resources/unit/ant-test/src/main/resources/main.txt b/src/test/resources/unit/ant-test/src/main/resources/main.txt
new file mode 100644
index 0000000..0aef8b1
--- /dev/null
+++ b/src/test/resources/unit/ant-test/src/main/resources/main.txt
@@ -0,0 +1 @@
+Test resource for main
\ No newline at end of file
diff --git a/src/test/resources/unit/ant-test/src/test/resources/test.txt b/src/test/resources/unit/ant-test/src/test/resources/test.txt
new file mode 100644
index 0000000..ca26e8d
--- /dev/null
+++ b/src/test/resources/unit/ant-test/src/test/resources/test.txt
@@ -0,0 +1 @@
+Test resource for test
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.