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>
|
||||
<directory>src/bin</directory>
|
||||
<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>
|
||||
<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.tar.TarArchiver;
|
||||
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.introspection.ReflectionValueExtractor;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
@ -96,6 +101,13 @@ public class AssemblyMojo
|
|||
*/
|
||||
private MavenProjectHelper projectHelper;
|
||||
|
||||
/**
|
||||
* @parameter expression="${project.build.directory}/archive-tmp"
|
||||
* @required
|
||||
* @readonly
|
||||
*/
|
||||
private File tempRoot;
|
||||
|
||||
|
||||
public void execute()
|
||||
throws MojoExecutionException
|
||||
|
@ -255,6 +267,16 @@ public class AssemblyMojo
|
|||
String directory = fileSet.getDirectory();
|
||||
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(
|
||||
fileSet.getDirectoryMode(), 8 ) );
|
||||
|
||||
|
@ -263,7 +285,8 @@ public class AssemblyMojo
|
|||
|
||||
getLog().debug("FileSet["+output+"]" +
|
||||
" 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 )
|
||||
{
|
||||
|
@ -287,16 +310,26 @@ public class AssemblyMojo
|
|||
{
|
||||
includes = null;
|
||||
}
|
||||
|
||||
|
||||
// TODO: default excludes should be in the archiver?
|
||||
List excludesList = fileSet.getExcludes();
|
||||
excludesList.addAll( getDefaultExcludes() );
|
||||
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 )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
|
@ -462,4 +495,90 @@ public class AssemblyMojo
|
|||
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>
|
||||
<required>true</required>
|
||||
</field>
|
||||
<field>
|
||||
<name>lineEnding</name>
|
||||
<version>1.0.0</version>
|
||||
<type>String</type>
|
||||
<!-- keep | unix | lf | dos | crlf -->
|
||||
</field>
|
||||
</fields>
|
||||
</class>
|
||||
<class>
|
||||
|
@ -129,12 +135,6 @@
|
|||
<defaultValue>runtime</defaultValue>
|
||||
<required>true</required>
|
||||
</field>
|
||||
<field>
|
||||
<name>lineEndings</name>
|
||||
<version>1.0.0</version>
|
||||
<type>String</type>
|
||||
<!-- native, cr, lf, crlf, ..? -->
|
||||
</field>
|
||||
</fields>
|
||||
</class>
|
||||
</classes>
|
||||
|
|
Loading…
Reference in New Issue