Author: jvanzyl Date: Mon Apr 6 14:49:43 2009 New Revision: 762367 URL: http://svn.apache.org/viewvc?rev=762367&view=rev Log: MRRESOURCES-36: ${project.build.sourceEncoding} not honoured Submitted by: Christian Schulte
Added: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm (with props) maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm (with props) Modified: maven/plugins/trunk/maven-remote-resources-plugin/pom.xml maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java Modified: maven/plugins/trunk/maven-remote-resources-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/pom.xml?rev=762367&r1=762366&r2=762367&view=diff ============================================================================== --- maven/plugins/trunk/maven-remote-resources-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-remote-resources-plugin/pom.xml Mon Apr 6 14:49:43 2009 @@ -29,7 +29,7 @@ </parent> <artifactId>maven-remote-resources-plugin</artifactId> - <version>1.0.2-SNAPSHOT</version> + <version>1.1-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>Maven Remote Resources Plugin</name> @@ -169,7 +169,7 @@ <goal>xsd</goal> </goals> <configuration> - <version>1.0.0</version> + <version>1.1.0</version> <models> <model>src/main/mdo/remote-resources.mdo</model> </models> @@ -183,7 +183,7 @@ <goal>xpp3-reader</goal> </goals> <configuration> - <version>1.0.0</version> + <version>1.1.0</version> <models> <model>src/main/mdo/remote-resources.mdo</model> </models> Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java?rev=762367&r1=762366&r2=762367&view=diff ============================================================================== --- maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java (original) +++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java Mon Apr 6 14:49:43 2009 @@ -83,6 +83,15 @@ */ private String[] excludes; + /** + * Encoding of the bundle. + * + * @since 1.1 + * @optional + * @parameter expression="${project.build.sourceEncoding}" + */ + private String sourceEncoding; + public void execute() throws MojoExecutionException { @@ -95,6 +104,7 @@ // so that velocity can easily process any resources inside the JAR that need to be processed. RemoteResourcesBundle remoteResourcesBundle = new RemoteResourcesBundle(); + remoteResourcesBundle.setSourceEncoding( sourceEncoding ); DirectoryScanner scanner = new DirectoryScanner(); Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java?rev=762367&r1=762366&r2=762367&view=diff ============================================================================== --- maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java (original) +++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java Mon Apr 6 14:49:43 2009 @@ -19,12 +19,16 @@ * under the License. */ -import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StringReader; import java.net.MalformedURLException; @@ -298,11 +302,11 @@ * @readonly */ private ResourceManager locator; - - + + /** * Scope to include. An Empty string indicates all scopes (default). - * + * * @since 1.0 * @parameter expression="${includeScope}" default-value="runtime" * @optional @@ -311,16 +315,16 @@ /** * Scope to exclude. An Empty string indicates no scopes (default). - * + * * @since 1.0 * @parameter expression="${excludeScope}" default-value="" * @optional */ protected String excludeScope; - + /** * Comma separated list of Artifact names too exclude. - * + * * @since 1.0 * @optional * @parameter expression="${excludeArtifactIds}" default-value="" @@ -329,7 +333,7 @@ /** * Comma separated list of Artifact names to include. - * + * * @since 1.0 * @optional * @parameter expression="${includeArtifactIds}" default-value="" @@ -338,7 +342,7 @@ /** * Comma separated list of GroupId Names to exclude. - * + * * @since 1.0 * @optional * @parameter expression="${excludeGroupIds}" default-value="" @@ -347,7 +351,7 @@ /** * Comma separated list of GroupIds to include. - * + * * @since 1.0 * @optional * @parameter expression="${includeGroupIds}" default-value="" @@ -356,7 +360,7 @@ /** * If we should exclude transitive dependencies - * + * * @since 1.0 * @optional * @parameter expression="${excludeTransitive}" default-value="false" @@ -455,7 +459,7 @@ throws MojoExecutionException { List projects = new ArrayList(); - + // add filters in well known order, least specific to most specific FilterArtifacts filter = new FilterArtifacts(); @@ -776,10 +780,30 @@ { if ( doVelocity ) { - PrintWriter writer = new PrintWriter( new FileWriter( f ) ); + PrintWriter writer; + if ( bundle.getSourceEncoding() == null ) + { + writer = new PrintWriter( new FileWriter( f ) ); + } + else + { + writer = new PrintWriter( new OutputStreamWriter( new FileOutputStream( f ), + bundle.getSourceEncoding() ) ); + + } + try { - velocity.getEngine().mergeTemplate( bundleResource, context, writer ); + if ( bundle.getSourceEncoding() == null ) + { + velocity.getEngine().mergeTemplate( bundleResource, context, writer ); + } + else + { + velocity.getEngine().mergeTemplate( bundleResource, bundle.getSourceEncoding(), + context, writer ); + + } } finally { @@ -799,31 +823,36 @@ projectResource + ".vm" ); if ( appendedResourceFile.exists() ) { - PrintWriter writer = new PrintWriter( new FileWriter( f, true ) ); - FileReader freader = new FileReader( appendedResourceFile ); - BufferedReader breader = new BufferedReader( freader ); + final InputStream in = new FileInputStream( appendedResourceFile ); + final OutputStream append = new FileOutputStream( f, true ); try { - String line = breader.readLine(); - - while ( line != null ) - { - writer.println( line ); - line = breader.readLine(); - } + IOUtil.copy( in, append ); } finally { - IOUtil.close(writer); - IOUtil.close(breader); + IOUtil.close( in ); + IOUtil.close( append ); } - } - else if ( appendedVmResourceFile.exists() ) + } + else if ( appendedVmResourceFile.exists() ) { - PrintWriter writer = new PrintWriter( new FileWriter( f, true ) ); + PrintWriter writer; FileReader freader = new FileReader( appendedVmResourceFile ); - try + + if ( bundle.getSourceEncoding() == null ) + { + writer = new PrintWriter( new FileWriter( f, true ) ); + } + else + { + writer = new PrintWriter( new OutputStreamWriter( new FileOutputStream( f, true ), + bundle.getSourceEncoding() ) ); + + } + + try { Velocity.init(); Velocity.evaluate( context, writer, "remote-resources", freader ); @@ -834,7 +863,7 @@ IOUtil.close(freader); } } - + } } } Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo?rev=762367&r1=762366&r2=762367&view=diff ============================================================================== --- maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo (original) +++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo Mon Apr 6 14:49:43 2009 @@ -33,12 +33,12 @@ <classes> <class rootElement="true" xml.tagName="remoteResourcesBundle"> <name>RemoteResourcesBundle</name> - <version>1.0.0</version> + <version>1.1.0</version> <description>Root element of the remote-resources.xml file.</description> <fields> <field> <name>remoteResources</name> - <version>1.0.0</version> + <version>1.1.0</version> <description><![CDATA[ Remote resources that are contained in a remote resources bundle. ]]></description> @@ -47,6 +47,14 @@ <multiplicity>*</multiplicity> </association> </field> + <field> + <name>sourceEncoding</name> + <version>1.1.0</version> + <description><![CDATA[ + Source encoding of the remote resources contained in the bundle. + ]]></description> + <type>String</type> + </field> </fields> </class> </classes> Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java?rev=762367&r1=762366&r2=762367&view=diff ============================================================================== --- maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java (original) +++ maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java Mon Apr 6 14:49:43 2009 @@ -30,7 +30,9 @@ import org.codehaus.plexus.util.FileUtils; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -38,6 +40,7 @@ import java.util.Properties; import java.util.jar.JarOutputStream; import java.util.zip.ZipEntry; +import org.codehaus.plexus.util.IOUtil; /** @@ -90,6 +93,7 @@ throws Exception { buildResourceBundle( "default-createbundle", + null, new String[] { "SIMPLE.txt" }, null ); } @@ -117,6 +121,7 @@ File file = new File( repo.getBasedir() + "/" + path + ".jar" ); file.getParentFile().mkdirs(); buildResourceBundle( "default-simplebundles-create", + null, new String[] { "SIMPLE.txt" }, file ); @@ -128,6 +133,88 @@ assertTrue( file.exists() ); } + public void testVelocityUTF8() + throws Exception + { + final MavenProjectResourcesStub project = createTestProject( "default-utf8" ); + final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings( project , + new String[] { + "test:test:1.2" + } ); + + setupDefaultProject( project ); + + ArtifactRepository repo = (ArtifactRepository) getVariableValueFromObject( mojo, "localRepository" ); + String path = repo.pathOf( new DefaultArtifact( "test", + "test", + VersionRange.createFromVersion( "1.2" ), + null, + "jar", + "", + new DefaultArtifactHandler() ) ); + + File file = new File( repo.getBasedir() + "/" + path + ".jar" ); + file.getParentFile().mkdirs(); + buildResourceBundle( "default-utf8-create", + "UTF-8", + new String[] { "UTF-8.bin.vm" }, + file ); + + mojo.execute(); + + file = (File) getVariableValueFromObject( mojo, "outputDirectory" ); + file = new File( file, "UTF-8.bin" ); + assertTrue( file.exists() ); + + InputStream in = new FileInputStream( file ); + byte[] data = IOUtil.toByteArray( in ); + IOUtil.close( in ); + + byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "UTF-8" ); + assertTrue( Arrays.equals( expected, data ) ); + } + + public void testVelocityISO88591() + throws Exception + { + final MavenProjectResourcesStub project = createTestProject( "default-iso88591" ); + final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings( project , + new String[] { + "test:test:1.3" + } ); + + setupDefaultProject( project ); + + ArtifactRepository repo = (ArtifactRepository) getVariableValueFromObject( mojo, "localRepository" ); + String path = repo.pathOf( new DefaultArtifact( "test", + "test", + VersionRange.createFromVersion( "1.3" ), + null, + "jar", + "", + new DefaultArtifactHandler() ) ); + + File file = new File( repo.getBasedir() + "/" + path + ".jar" ); + file.getParentFile().mkdirs(); + buildResourceBundle( "default-iso88591-create", + "ISO-8859-1", + new String[] { "ISO-8859-1.bin.vm" }, + file ); + + mojo.execute(); + + file = (File) getVariableValueFromObject( mojo, "outputDirectory" ); + file = new File( file, "ISO-8859-1.bin" ); + assertTrue( file.exists() ); + + InputStream in = new FileInputStream( file ); + byte[] data = IOUtil.toByteArray( in ); + IOUtil.close( in ); + + byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "ISO-8859-1" ); + assertTrue( Arrays.equals( expected, data ) ); + } + public void testFilteredBundles() throws Exception { @@ -151,6 +238,7 @@ File file = new File( repo.getBasedir() + "/" + path + ".jar" ); file.getParentFile().mkdirs(); buildResourceBundle( "default-filterbundles-create", + null, new String[] { "FILTER.txt.vm" }, file ); @@ -169,6 +257,7 @@ } protected void buildResourceBundle( String id, + String sourceEncoding, String resourceNames[], File jarName ) throws Exception @@ -176,7 +265,7 @@ final MavenProjectResourcesStub project = createTestProject( id ); final File resourceDir = new File( project.getBasedir() + "/src/main/resources" ); - final BundleRemoteResourcesMojo mojo = lookupBundleMojoWithSettings( project , resourceDir ); + final BundleRemoteResourcesMojo mojo = lookupBundleMojoWithSettings( project , resourceDir, sourceEncoding ); setupDefaultProject( project ); @@ -209,9 +298,10 @@ for ( int x = 0; x < resourceNames.length; x++ ) { File resource = new File( resourceDir, resourceNames[x] ); - data = FileUtils.fileRead( resource ); + InputStream in = new FileInputStream( resource ); jar.putNextEntry( new ZipEntry( resourceNames[x] ) ); - jar.write( data.getBytes() ); + IOUtil.copy( in, jar ); + IOUtil.close( in ); jar.closeEntry(); } jar.close(); @@ -252,16 +342,17 @@ throws Exception { File resourceDir = new File( project.getBasedir() + "/src/main/resources" ); - return lookupBundleMojoWithSettings( project, resourceDir ); + return lookupBundleMojoWithSettings( project, resourceDir, null ); } protected BundleRemoteResourcesMojo lookupBundleMojoWithSettings( final MavenProject project, - File resourceDir ) + File resourceDir, String sourceEncoding ) throws Exception { final BundleRemoteResourcesMojo mojo = lookupBundleMojo(); setVariableValueToObject( mojo, "resourcesDirectory", resourceDir ); setVariableValueToObject( mojo, "outputDirectory", new File( project.getBuild().getOutputDirectory() ) ); + setVariableValueToObject( mojo, "sourceEncoding", sourceEncoding ); return mojo; } Added: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm?rev=762367&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm?rev=762367&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream