Author: bentmann
Date: Tue Jul 29 03:49:16 2008
New Revision: 680669
URL: http://svn.apache.org/viewvc?rev=680669&view=rev
Log:
[MANT-46] mvn ant:ant throws a StringIndexOutOfBoundsException
Added:
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/ (with props)
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt
(with props)
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml
(with props)
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh
(with props)
Modified:
maven/plugins/trunk/maven-ant-plugin/pom.xml
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
maven/plugins/trunk/maven-ant-plugin/src/test/java/org/apache/maven/plugin/ant/AntBuildWriterUtilTest.java
Modified: maven/plugins/trunk/maven-ant-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/pom.xml?rev=680669&r1=680668&r2=680669&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ant-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-ant-plugin/pom.xml Tue Jul 29 03:49:16 2008
@@ -72,11 +72,6 @@
<version>2.0.6</version>
</dependency>
<dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-provider-api</artifactId>
- <version>1.0-beta-2</version>
- </dependency>
- <dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0.2</version>
@@ -84,7 +79,7 @@
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
- <version>1.5.4</version>
+ <version>1.5.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
Propchange: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Jul 29 03:49:16 2008
@@ -0,0 +1,5 @@
+target
+build.xml
+maven-build.properties
+maven-build.xml
+build.log
Added: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt?rev=680669&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt
(added)
+++ maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt Tue
Jul 29 03:49:16 2008
@@ -0,0 +1,3 @@
+clean
+ant:ant
+antrun:run
Propchange:
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/goals.txt
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml?rev=680669&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml (added)
+++ maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml Tue
Jul 29 03:49:16 2008
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>org.apache.maven.plugins.maven-ant-plugin.it</groupId>
+ <artifactId>relative-path-it</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-ant-plugin</artifactId>
+ <version>@pom.version@</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>${basedir}</directory>
+ <includes>
+ <include>build.xml</include>
+ <include>maven-build.*</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ <configuration>
+ <tasks>
+ <ant dir="${basedir}" antfile="${basedir}/build.xml"
target="package" />
+ </tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>.</directory>
+ <targetPath>META-INF</targetPath>
+ <includes>
+ <include>NOTICE.txt</include>
+ <include>LICENSE.txt</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
Propchange: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh?rev=680669&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh
(added)
+++ maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh Tue
Jul 29 03:49:16 2008
@@ -0,0 +1,61 @@
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
+
+import org.codehaus.plexus.util.*;
+
+boolean checkValue( String expected, String key, Properties props )
+{
+ String actual = props.getProperty( key );
+ if ( !expected.equals( actual ) )
+ {
+ System.err.println( "Generated build properties contain bad value for
key " + key + ": expected \"" + expected
+ + "\" but was \"" + actual + "\"" );
+ return false;
+ }
+ return true;
+}
+
+try
+{
+ File propsFile = new File( basedir, "maven-build.properties" );
+ Properties props = new Properties();
+ InputStream in = null;
+ try
+ {
+ in = new FileInputStream( propsFile );
+ props.load( in );
+ }
+ finally
+ {
+ IOUtil.close( in );
+ }
+
+ if ( !checkValue( "target", "maven.build.dir", props ) )
+ {
+ return false;
+ }
+ if ( !checkValue( "src/main/java", "maven.build.srcDir.0", props ) )
+ {
+ return false;
+ }
+ if ( !checkValue( "src/test/java", "maven.build.testDir.0", props ) )
+ {
+ return false;
+ }
+ if ( !checkValue( "src/main/resources", "maven.build.resourceDir.0", props
) )
+ {
+ return false;
+ }
+ if ( !checkValue( ".", "maven.build.resourceDir.1", props ) )
+ {
+ return false;
+ }
+}
+catch( Throwable t )
+{
+ t.printStackTrace();
+ return false;
+}
+
+return true;
Propchange:
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-ant-plugin/src/it/relative-path-it/verify.bsh
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java?rev=680669&r1=680668&r2=680669&view=diff
==============================================================================
---
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
(original)
+++
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
Tue Jul 29 03:49:16 2008
@@ -36,7 +36,6 @@
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.FileUtils;
import org.codehaus.plexus.util.IOUtil;
@@ -138,17 +137,17 @@
// Build properties
//
----------------------------------------------------------------------
- addProperty( properties, "maven.build.finalName",
PathUtils.toRelative( project.getBasedir(), project
+ addProperty( properties, "maven.build.finalName",
AntBuildWriterUtil.toRelative( project.getBasedir(), project
.getBuild().getFinalName() ) );
// target
- addProperty( properties, "maven.build.dir", PathUtils.toRelative(
project.getBasedir(), project.getBuild()
+ addProperty( properties, "maven.build.dir",
AntBuildWriterUtil.toRelative( project.getBasedir(), project.getBuild()
.getDirectory() ) );
addProperty( properties, "project.build.directory",
"${maven.build.dir}" );
// ${maven.build.dir}/classes
addProperty( properties, "maven.build.outputDir", "${maven.build.dir}/"
- + PathUtils.toRelative( new File( project.getBasedir(),
properties.getProperty( "maven.build.dir" ) ),
+ + AntBuildWriterUtil.toRelative( new File( project.getBasedir(),
properties.getProperty( "maven.build.dir" ) ),
project.getBuild().getOutputDirectory() )
);
addProperty( properties, "project.build.outputDirectory",
"${maven.build.outputDir}" );
@@ -158,7 +157,7 @@
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(),
+ addProperty( properties, "maven.build.srcDir." + i,
AntBuildWriterUtil.toRelative( project.getBasedir(),
compileSourceRoots[i] ) );
}
}
@@ -168,14 +167,14 @@
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(),
+ addProperty( properties, "maven.build.resourceDir." + i,
AntBuildWriterUtil.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" ) ),
+ + AntBuildWriterUtil.toRelative( new File( project.getBasedir(),
properties.getProperty( "maven.build.dir" ) ),
project.getBuild().getTestOutputDirectory() ) );
// src/test/java
if ( !project.getTestCompileSourceRoots().isEmpty() )
@@ -183,7 +182,7 @@
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(),
+ addProperty( properties, "maven.build.testDir." + i,
AntBuildWriterUtil.toRelative( project.getBasedir(),
compileSourceRoots[i] ) );
}
}
@@ -193,7 +192,7 @@
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
+ addProperty( properties, "maven.build.testResourceDir." + i,
AntBuildWriterUtil
.toRelative( project.getBasedir(), array[i].getDirectory()
) );
}
}
@@ -435,13 +434,13 @@
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.dir" );
- writer.addAttribute( "value", PathUtils.toRelative(
project.getBasedir(), project.getBuild().getDirectory() ) );
+ writer.addAttribute( "value", AntBuildWriterUtil.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()
+ + AntBuildWriterUtil.toRelative( new File(
project.getBuild().getDirectory() ), project.getBuild()
.getOutputDirectory() ) );
writer.endElement(); // property
@@ -452,7 +451,7 @@
{
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.srcDir." + i );
- writer.addAttribute( "value", PathUtils.toRelative(
project.getBasedir(), compileSourceRoots[i] ) );
+ writer.addAttribute( "value", AntBuildWriterUtil.toRelative(
project.getBasedir(), compileSourceRoots[i] ) );
writer.endElement(); // property
}
}
@@ -464,7 +463,7 @@
{
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.resourceDir." + i );
- writer.addAttribute( "value", PathUtils.toRelative(
project.getBasedir(), array[i].getDirectory() ) );
+ writer.addAttribute( "value", AntBuildWriterUtil.toRelative(
project.getBasedir(), array[i].getDirectory() ) );
writer.endElement(); // property
}
}
@@ -472,7 +471,7 @@
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.testOutputDir" );
writer.addAttribute( "value", "${maven.build.dir}/"
- + PathUtils.toRelative( new File(
project.getBuild().getDirectory() ), project.getBuild()
+ + AntBuildWriterUtil.toRelative( new File(
project.getBuild().getDirectory() ), project.getBuild()
.getTestOutputDirectory() ) );
writer.endElement(); // property
@@ -483,7 +482,7 @@
{
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.testDir." + i );
- writer.addAttribute( "value", PathUtils.toRelative(
project.getBasedir(), compileSourceRoots[i] ) );
+ writer.addAttribute( "value", AntBuildWriterUtil.toRelative(
project.getBasedir(), compileSourceRoots[i] ) );
writer.endElement(); // property
}
}
@@ -495,7 +494,7 @@
{
writer.startElement( "property" );
writer.addAttribute( "name", "maven.build.testResourceDir." +
i );
- writer.addAttribute( "value", PathUtils.toRelative(
project.getBasedir(), array[i].getDirectory() ) );
+ writer.addAttribute( "value", AntBuildWriterUtil.toRelative(
project.getBasedir(), array[i].getDirectory() ) );
writer.endElement(); // property
}
}
@@ -514,7 +513,7 @@
writer.startElement( "property" );
writer.addAttribute( "name", "maven.reporting.outputDirectory" );
writer.addAttribute( "value", "${maven.build.dir}/"
- + PathUtils.toRelative( new File(
project.getBuild().getDirectory() ), reportingOutputDir ) );
+ + AntBuildWriterUtil.toRelative( new File(
project.getBuild().getDirectory() ), reportingOutputDir ) );
writer.endElement(); // property
//
----------------------------------------------------------------------
@@ -585,7 +584,7 @@
{
Artifact artifact = (Artifact) i.next();
writer.startElement( "include" );
- writer.addAttribute( "name", PathUtils.toRelative(
localRepository, artifact.getFile().getPath() ) );
+ writer.addAttribute( "name", AntBuildWriterUtil.toRelative(
localRepository, artifact.getFile().getPath() ) );
writer.endElement(); // include
}
}
@@ -608,7 +607,7 @@
{
Artifact artifact = (Artifact) i.next();
writer.startElement( "include" );
- writer.addAttribute( "name", PathUtils.toRelative(
localRepository, artifact.getFile().getPath() ) );
+ writer.addAttribute( "name", AntBuildWriterUtil.toRelative(
localRepository, artifact.getFile().getPath() ) );
writer.endElement(); // include
}
}
@@ -1253,7 +1252,7 @@
Artifact artifact = (Artifact) i.next();
// TODO: should the artifacthandler be used instead?
- String path = PathUtils.toRelative( localRepository,
artifact.getFile().getPath() );
+ String path = AntBuildWriterUtil.toRelative( localRepository,
artifact.getFile().getPath() );
if ( !new File( path ).exists() )
{
Modified:
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java?rev=680669&r1=680668&r2=680669&view=diff
==============================================================================
---
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
(original)
+++
maven/plugins/trunk/maven-ant-plugin/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
Tue Jul 29 03:49:16 2008
@@ -37,8 +37,8 @@
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;
-import org.apache.maven.wagon.PathUtils;
import org.apache.xpath.XPathAPI;
+import org.codehaus.plexus.util.PathTool;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.XMLWriter;
import org.codehaus.plexus.util.xml.XmlWriterUtil;
@@ -157,7 +157,7 @@
{
writer.startElement( "ant" );
writer.addAttribute( "antfile", "build.xml" );
- writer.addAttribute( "dir", PathUtils.toRelative(
project.getBasedir(), moduleSubPath ) );
+ writer.addAttribute( "dir", toRelative( project.getBasedir(),
moduleSubPath ) );
writer.addAttribute( "target", tasks );
writer.endElement(); // ant
}
@@ -1269,4 +1269,67 @@
return singularForm;
}
+ /**
+ * Relativizes the specified path against the given base directory (if
possible). If the specified path is a
+ * subdirectory of the base directory, the base directory prefix will be
chopped off. If the specified path is equal
+ * to the base directory, the path "." is returned. Otherwise, the path is
returned as is. Examples:
+ * <table border="1">
+ * <tr>
+ * <td>basedir</td>
+ * <td>path</td>
+ * <td>result</td>
+ * </tr>
+ * <tr>
+ * <td>/home</td>
+ * <td>/home/dir</td>
+ * <td>dir</td>
+ * </tr>
+ * <tr>
+ * <td>/home</td>
+ * <td>/home/dir/</td>
+ * <td>dir/</td>
+ * </tr>
+ * <tr>
+ * <td>/home</td>
+ * <td>/home</td>
+ * <td>.</td>
+ * </tr>
+ * <tr>
+ * <td>/home</td>
+ * <td>/home/</td>
+ * <td>./</td>
+ * </tr>
+ * <tr>
+ * <td>/home</td>
+ * <td>dir</td>
+ * <td>dir</td>
+ * </tr>
+ * </table>
+ * The returned path will always use the forward slash ('/') as the file
separator regardless of the current
+ * platform. Also, the result path will have a trailing slash if the input
path has a trailing file separator.
+ *
+ * @param basedir The base directory to relativize the path against, must
not be <code>null</code>.
+ * @param path The path to relativize, must not be <code>null</code>.
+ * @return The relativized path, never <code>null</code>.
+ */
+ static String toRelative( File basedir, String path )
+ {
+ String result = null;
+ if ( new File( path ).isAbsolute() )
+ {
+ String pathNormalized = path.replace( '/', File.separatorChar
).replace( '\\', File.separatorChar );
+ result = PathTool.getRelativeFilePath( basedir.getAbsolutePath(),
pathNormalized );
+ }
+ if ( result == null )
+ {
+ result = path;
+ }
+ result = result.replace( '\\', '/' );
+ if ( result.length() <= 0 || "/".equals( result ) )
+ {
+ result = '.' + result;
+ }
+ return result;
+ }
+
}
Modified:
maven/plugins/trunk/maven-ant-plugin/src/test/java/org/apache/maven/plugin/ant/AntBuildWriterUtilTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ant-plugin/src/test/java/org/apache/maven/plugin/ant/AntBuildWriterUtilTest.java?rev=680669&r1=680668&r2=680669&view=diff
==============================================================================
---
maven/plugins/trunk/maven-ant-plugin/src/test/java/org/apache/maven/plugin/ant/AntBuildWriterUtilTest.java
(original)
+++
maven/plugins/trunk/maven-ant-plugin/src/test/java/org/apache/maven/plugin/ant/AntBuildWriterUtilTest.java
Tue Jul 29 03:49:16 2008
@@ -136,7 +136,7 @@
}
/**
- * Test method for [EMAIL PROTECTED]
AntBuildWriterUtil#getSingularForm(String)}.
+ * Test method for
<code>AntBuildWriterUtil.getSingularForm(String)}</code>.
*
* @throws Exception
*/
@@ -150,4 +150,26 @@
assertEquals( "", AntBuildWriterUtil.getSingularForm( null ) );
}
+ /**
+ * Test method for <code>AntBuildWriterUtil.toRelative(File,
String)</code>.
+ *
+ * @throws Exception
+ */
+ public static void testToRelative()
+ throws Exception
+ {
+ assertEquals( "relative", AntBuildWriterUtil.toRelative( new File(
"/home" ), "relative" ) );
+ assertEquals( "dir", AntBuildWriterUtil.toRelative( new File( "home" ),
+ new File(
"home/dir" ).getAbsolutePath() ) );
+ assertEquals( "dir", AntBuildWriterUtil.toRelative( new File( "/home"
),
+ new File(
"/home/dir" ).getAbsolutePath() ) );
+ assertEquals( "dir/", AntBuildWriterUtil.toRelative( new File( "/home"
),
+ new File(
"/home/dir" ).getAbsolutePath() + "/" ) );
+ assertEquals( "dir/sub", AntBuildWriterUtil.toRelative( new File(
"/home" ),
+ new File(
"/home/dir/sub" ).getAbsolutePath() ) );
+ assertEquals( ".", AntBuildWriterUtil.toRelative( new File( "/home" ),
new File( "/home" ).getAbsolutePath() ) );
+ assertEquals( "./", AntBuildWriterUtil.toRelative( new File( "/home"
), new File( "/home" ).getAbsolutePath()
+ + "/" ) );
+ }
+
}