diff --git a/pom.xml b/pom.xml index 43011e60..de6326c3 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,9 @@ under the License. Kevin Risden + + Michael Stumpf + diff --git a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java index 7a506ba0..addcd369 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java @@ -108,6 +108,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; @@ -4374,9 +4375,15 @@ private void addCommandLineOptions( Commandline cmd, List arguments, Fil options.append( StringUtils.join( arguments.iterator(), SystemUtils.LINE_SEPARATOR ) ); + /* default to platform encoding */ + String outputFileEncoding = null; + if ( JAVA_VERSION.isAtLeast( "9" ) ) + { + outputFileEncoding = StandardCharsets.UTF_8.name(); + } try { - FileUtils.fileWrite( optionsFile.getAbsolutePath(), null /* platform encoding */, options.toString() ); + FileUtils.fileWrite( optionsFile.getAbsolutePath(), outputFileEncoding, options.toString() ); } catch ( IOException e ) { diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java index 0f18b6b4..46358ab3 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.HashMap; @@ -189,10 +190,26 @@ private void createTestRepo() */ private static String readFile( File file ) throws IOException + { + return readFile( file, StandardCharsets.UTF_8 ); + } + + /** + * Convenience method that reads the contents of the specified file object into a string with a + * space as line separator. + * + * @see #LINE_SEPARATOR + * @param file the file to be read + * @param cs charset to use + * @return a String object that contains the contents of the file + * @throws IOException if any + */ + private static String readFile( File file, Charset cs ) + throws IOException { StringBuilder str = new StringBuilder( (int) file.length() ); - for ( String strTmp : Files.readAllLines( file.toPath(), StandardCharsets.UTF_8 ) ) + for ( String strTmp : Files.readAllLines( file.toPath(), cs ) ) { str.append( LINE_SEPARATOR); str.append( strTmp ); @@ -497,6 +514,55 @@ public void testQuotedPath() } } + /** + * Method to test when the options file has umlauts. + * + * @throws Exception if any + */ + public void testOptionsUmlautEncoding() + throws Exception + { + File testPom = new File(unit, "optionsumlautencoding-test/optionsumlautencoding-test-plugin-config.xml" ); + JavadocReport mojo = lookupMojo( testPom ); + mojo.execute(); + + File optionsFile = new File( mojo.getOutputDirectory(), "options" ); + assertTrue( optionsFile.exists() ); + + // check for a part of the window title + String content; + if ( JavaVersion.JAVA_VERSION.isAtLeast( "9" ) ) + { + content = readFile( optionsFile, StandardCharsets.UTF_8 ); + } + else + { + content = readFile( optionsFile, Charset.defaultCharset() ); + } + assertTrue( content.contains( "Options Umlaut Encoding ö ä ü ß" ) ); + + File apidocs = new File( getBasedir(), "target/test/unit/optionsumlautencoding-test/target/site/apidocs" ); + + // package level generated javadoc files + assertTrue( new File( apidocs, "optionsumlautencoding/test/App.html" ).exists() ); + assertTrue( new File( apidocs, "optionsumlautencoding/test/AppSample.html" ).exists() ); + + // project level generated javadoc files + assertTrue( new File( apidocs, "index-all.html" ).exists() ); + assertTrue( new File( apidocs, "index.html" ).exists() ); + assertTrue( new File( apidocs, "overview-tree.html" ).exists() ); + assertTrue( new File( apidocs, "stylesheet.css" ).exists() ); + + if ( JavaVersion.JAVA_VERSION.isBefore( "10" ) ) + { + assertTrue( new File( apidocs, "package-list" ).exists() ); + } + else + { + assertTrue( new File( apidocs, "element-list" ).exists() ); + } + } + /** * @throws Exception if any */ diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java new file mode 100644 index 00000000..a38d7ce9 --- /dev/null +++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java @@ -0,0 +1,80 @@ +package org.apache.maven.plugins.javadoc.stubs; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.plugin.testing.stubs.MavenProjectStub; +import org.apache.maven.model.Scm; +import org.apache.maven.model.Build; + +import java.util.List; +import java.util.ArrayList; +import java.io.File; + +public class OptionsUmlautEncodingMavenProjectStub + extends MavenProjectStub +{ + private Scm scm; + + public OptionsUmlautEncodingMavenProjectStub() + { + readModel( new File( getBasedir(), "optionsumlautencoding-test-plugin-config.xml" ) ); + + setGroupId( "org.apache.maven.plugins.maven-javadoc-plugin.unit" ); + setArtifactId( "optionsumlautencoding-test" ); + setVersion( "1.0-SNAPSHOT" ); + setName( "Maven Javadoc Plugin Options Umlaut Encoding Test" ); + setUrl( "http://maven.apache.org" ); + setPackaging( "jar" ); + + Scm scm = new Scm(); + scm.setConnection( "scm:svn:http://svn.apache.org/maven/sample/trunk" ); + setScm( scm ); + + Build build = new Build(); + build.setFinalName( "optionsumlautencoding-test" ); + build.setDirectory( super.getBasedir() + "/target/test/unit/optionsumlautencoding-test/target" ); + setBuild( build ); + + List compileSourceRoots = new ArrayList<>(); + compileSourceRoots.add( getBasedir() + "/optionsumlautencoding/test" ); + setCompileSourceRoots( compileSourceRoots ); + } + + /** {@inheritDoc} */ + @Override + public Scm getScm() + { + return scm; + } + + /** {@inheritDoc} */ + @Override + public void setScm( Scm scm ) + { + this.scm = scm; + } + + /** {@inheritDoc} */ + @Override + public File getBasedir() + { + return new File( super.getBasedir() + "/src/test/resources/unit/optionsumlautencoding-test" ); + } +} diff --git a/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding-test-plugin-config.xml b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding-test-plugin-config.xml new file mode 100644 index 00000000..eed07c73 --- /dev/null +++ b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding-test-plugin-config.xml @@ -0,0 +1,73 @@ + + + + 4.0.0 + org.apache.maven.plugins.maven-javadoc-plugin.unit + optionsumlautencoding-test + jar + 1.0-SNAPSHOT + 2006 + Maven Javadoc Plugin Options Umlaut Encoding Test + http://maven.apache.org + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + ${localRepository} + ${basedir}/target/test/unit/optionsumlautencoding-test/target/site/apidocs + ${basedir}/target/test/unit/optionsumlautencoding-test/target/javadoc-bundle-options + false + false + protected + true + false + true + ISO-8859-1 + false + false + false + false + false + false + false + false + false + false + false + false + java + + + true + true + + Maven Javadoc Plugin Options Umlaut Encoding ö ä ü ß Test 1.0-SNAPSHOT API + true + true + true + + + + + diff --git a/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/App.java b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/App.java new file mode 100644 index 00000000..ad8447b2 --- /dev/null +++ b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/App.java @@ -0,0 +1,36 @@ +package optionsumlautencoding.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +public class App +{ + + public static void main( String[] args ) + { + System.out.println( "Sample Application." ); + } + + + protected void sampleMethod( String str ) + { + System.out.println( str ); + } + +} \ No newline at end of file diff --git a/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/AppSample.java b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/AppSample.java new file mode 100644 index 00000000..dcae2e32 --- /dev/null +++ b/src/test/resources/unit/optionsumlautencoding-test/optionsumlautencoding/test/AppSample.java @@ -0,0 +1,39 @@ +package optionsumlautencoding.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +/** + * @author Maria Odea Ching + * @since 1.4 + * @version %I%, %G% + */ +public class AppSample +{ + + /** + * The main method + * + * @param args an array of strings that contains the arguments + */ + public static void main( String[] args ) + { + System.out.println( "Another Sample Application" ); + } +} \ No newline at end of file