mirror of https://github.com/apache/maven.git
o Finished MNG-632.
Note: I'm not sure wheter my tmpDir approach is the best. It's certain to work all the time (depending on FileUtils.createTempFile), but it may leave a lot of 'garbage' in target/. o Updated maven-core's assembly descriptor to make use of new line endings functionality. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@267344 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9da1858237
commit
c23770947f
|
@ -16,6 +16,20 @@
|
||||||
<fileSet>
|
<fileSet>
|
||||||
<directory>src/bin</directory>
|
<directory>src/bin</directory>
|
||||||
<outputDirectory>bin</outputDirectory>
|
<outputDirectory>bin</outputDirectory>
|
||||||
|
<includes>
|
||||||
|
<include>*.bat</include>
|
||||||
|
<include>*.conf</include>
|
||||||
|
</includes>
|
||||||
|
<lineEnding>dos</lineEnding>
|
||||||
|
</fileSet>
|
||||||
|
<fileSet>
|
||||||
|
<directory>src/bin</directory>
|
||||||
|
<outputDirectory>bin</outputDirectory>
|
||||||
|
<includes>
|
||||||
|
<include>m2</include>
|
||||||
|
</includes>
|
||||||
|
<lineEnding>unix</lineEnding>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
</fileSet>
|
</fileSet>
|
||||||
<fileSet>
|
<fileSet>
|
||||||
<directory>src/conf</directory>
|
<directory>src/conf</directory>
|
||||||
|
|
|
@ -34,12 +34,17 @@ import org.codehaus.plexus.archiver.ArchiverException;
|
||||||
import org.codehaus.plexus.archiver.jar.JarArchiver;
|
import org.codehaus.plexus.archiver.jar.JarArchiver;
|
||||||
import org.codehaus.plexus.archiver.tar.TarArchiver;
|
import org.codehaus.plexus.archiver.tar.TarArchiver;
|
||||||
import org.codehaus.plexus.archiver.zip.ZipArchiver;
|
import org.codehaus.plexus.archiver.zip.ZipArchiver;
|
||||||
|
import org.codehaus.plexus.util.DirectoryScanner;
|
||||||
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
import org.codehaus.plexus.util.IOUtil;
|
import org.codehaus.plexus.util.IOUtil;
|
||||||
import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
|
import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
|
||||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
@ -96,6 +101,13 @@ public class AssemblyMojo
|
||||||
*/
|
*/
|
||||||
private MavenProjectHelper projectHelper;
|
private MavenProjectHelper projectHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${project.build.directory}/archive-tmp"
|
||||||
|
* @required
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private File tempRoot;
|
||||||
|
|
||||||
|
|
||||||
public void execute()
|
public void execute()
|
||||||
throws MojoExecutionException
|
throws MojoExecutionException
|
||||||
|
@ -255,6 +267,16 @@ public class AssemblyMojo
|
||||||
String directory = fileSet.getDirectory();
|
String directory = fileSet.getDirectory();
|
||||||
String output = fileSet.getOutputDirectory();
|
String output = fileSet.getOutputDirectory();
|
||||||
|
|
||||||
|
String lineEnding = getLineEndingCharacters( fileSet.getLineEnding() );
|
||||||
|
|
||||||
|
File tmpDir = null;
|
||||||
|
|
||||||
|
if ( lineEnding != null )
|
||||||
|
{
|
||||||
|
tmpDir = FileUtils.createTempFile( "", "", tempRoot );
|
||||||
|
tmpDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
archiver.setDefaultDirectoryMode( Integer.parseInt(
|
archiver.setDefaultDirectoryMode( Integer.parseInt(
|
||||||
fileSet.getDirectoryMode(), 8 ) );
|
fileSet.getDirectoryMode(), 8 ) );
|
||||||
|
|
||||||
|
@ -263,7 +285,8 @@ public class AssemblyMojo
|
||||||
|
|
||||||
getLog().debug("FileSet["+output+"]" +
|
getLog().debug("FileSet["+output+"]" +
|
||||||
" dir perms: " + Integer.toString( archiver.getDefaultDirectoryMode(), 8 ) +
|
" dir perms: " + Integer.toString( archiver.getDefaultDirectoryMode(), 8 ) +
|
||||||
" file perms: " + Integer.toString( archiver.getDefaultFileMode(), 8 ) );
|
" file perms: " + Integer.toString( archiver.getDefaultFileMode(), 8 ) +
|
||||||
|
( fileSet.getLineEnding() == null ? "" : " lineEndings: " + fileSet.getLineEnding() ) );
|
||||||
|
|
||||||
if ( directory == null )
|
if ( directory == null )
|
||||||
{
|
{
|
||||||
|
@ -287,16 +310,26 @@ public class AssemblyMojo
|
||||||
{
|
{
|
||||||
includes = null;
|
includes = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: default excludes should be in the archiver?
|
||||||
List excludesList = fileSet.getExcludes();
|
List excludesList = fileSet.getExcludes();
|
||||||
excludesList.addAll( getDefaultExcludes() );
|
excludesList.addAll( getDefaultExcludes() );
|
||||||
String[] excludes = (String[]) excludesList.toArray( EMPTY_STRING_ARRAY );
|
String[] excludes = (String[]) excludesList.toArray( EMPTY_STRING_ARRAY );
|
||||||
|
|
||||||
// TODO: default excludes should be in the archiver?
|
|
||||||
archiver.addDirectory( new File( directory ), output, includes, excludes );
|
File archiveBaseDir = new File( directory );
|
||||||
|
|
||||||
|
if ( lineEnding != null )
|
||||||
|
{
|
||||||
|
copySetReplacingLineEndings( archiveBaseDir, tmpDir, includes, excludes, lineEnding );
|
||||||
|
|
||||||
|
archiveBaseDir = tmpDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
archiver.addDirectory( archiveBaseDir, output, includes, excludes );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String evaluateFileNameMapping( String expression, Artifact artifact )
|
private static String evaluateFileNameMapping( String expression, Artifact artifact )
|
||||||
throws MojoExecutionException
|
throws MojoExecutionException
|
||||||
{
|
{
|
||||||
|
@ -462,4 +495,90 @@ public class AssemblyMojo
|
||||||
return defaultExcludes;
|
return defaultExcludes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void copyReplacingLineEndings( File source, File dest, String lineEndings )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
getLog().debug( "Copying while replacing line endings: " + source + " to " + dest );
|
||||||
|
|
||||||
|
BufferedReader in = new BufferedReader( new FileReader ( source ) );
|
||||||
|
BufferedWriter out = new BufferedWriter ( new FileWriter( dest ) );
|
||||||
|
|
||||||
|
String line;
|
||||||
|
|
||||||
|
while ( ( line = in.readLine()) != null )
|
||||||
|
{
|
||||||
|
out.write( line );
|
||||||
|
out.write( lineEndings );
|
||||||
|
}
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void copySetReplacingLineEndings( File archiveBaseDir, File tmpDir, String[] includes, String[] excludes, String lineEnding )
|
||||||
|
throws ArchiverException
|
||||||
|
{
|
||||||
|
DirectoryScanner scanner = new DirectoryScanner();
|
||||||
|
scanner.setBasedir( archiveBaseDir.getAbsolutePath() );
|
||||||
|
scanner.setIncludes( includes );
|
||||||
|
scanner.setExcludes( excludes );
|
||||||
|
scanner.scan();
|
||||||
|
|
||||||
|
String [] dirs = scanner.getIncludedDirectories();
|
||||||
|
|
||||||
|
for ( int j = 0; j < dirs.length; j ++)
|
||||||
|
{
|
||||||
|
new File( tempRoot, dirs[j] ).mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
String [] files = scanner.getIncludedFiles();
|
||||||
|
|
||||||
|
for ( int j = 0; j < files.length; j ++)
|
||||||
|
{
|
||||||
|
File targetFile = new File( tmpDir, files[j] );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
targetFile.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
copyReplacingLineEndings( new File( archiveBaseDir, files[j] ), targetFile, lineEnding );
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
throw new ArchiverException("Error copying file '" +
|
||||||
|
files[j] + "' to '" + targetFile + "'", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static String getLineEndingCharacters( String lineEnding )
|
||||||
|
throws ArchiverException
|
||||||
|
{
|
||||||
|
if ( lineEnding != null )
|
||||||
|
{
|
||||||
|
if ( lineEnding.equals( "keep" ) )
|
||||||
|
{
|
||||||
|
lineEnding = null;
|
||||||
|
}
|
||||||
|
else if ( lineEnding.equals( "dos" ) || lineEnding.equals( "crlf" ) )
|
||||||
|
{
|
||||||
|
lineEnding = "\r\n";
|
||||||
|
}
|
||||||
|
else if ( lineEnding.equals( "unix" ) || lineEnding.equals( "lf" ) )
|
||||||
|
{
|
||||||
|
lineEnding = "\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ArchiverException( "Illlegal lineEnding specified: '" +
|
||||||
|
lineEnding + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lineEnding;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,12 @@
|
||||||
<type>String</type>
|
<type>String</type>
|
||||||
<required>true</required>
|
<required>true</required>
|
||||||
</field>
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>lineEnding</name>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<type>String</type>
|
||||||
|
<!-- keep | unix | lf | dos | crlf -->
|
||||||
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
</class>
|
</class>
|
||||||
<class>
|
<class>
|
||||||
|
@ -129,12 +135,6 @@
|
||||||
<defaultValue>runtime</defaultValue>
|
<defaultValue>runtime</defaultValue>
|
||||||
<required>true</required>
|
<required>true</required>
|
||||||
</field>
|
</field>
|
||||||
<field>
|
|
||||||
<name>lineEndings</name>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
<type>String</type>
|
|
||||||
<!-- native, cr, lf, crlf, ..? -->
|
|
||||||
</field>
|
|
||||||
</fields>
|
</fields>
|
||||||
</class>
|
</class>
|
||||||
</classes>
|
</classes>
|
||||||
|
|
Loading…
Reference in New Issue