diff --git a/src/it/projects/MJAVADOC-770/invoker.properties b/src/it/projects/MJAVADOC-770/invoker.properties new file mode 100644 index 00000000..c30bd85d --- /dev/null +++ b/src/it/projects/MJAVADOC-770/invoker.properties @@ -0,0 +1,19 @@ +# 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. + +invoker.goals= package +invoker.java.version = 9+ diff --git a/src/it/projects/MJAVADOC-770/pom.xml b/src/it/projects/MJAVADOC-770/pom.xml new file mode 100644 index 00000000..8510c2d8 --- /dev/null +++ b/src/it/projects/MJAVADOC-770/pom.xml @@ -0,0 +1,83 @@ + + + + 4.0.0 + + org.apache.maven.plugins.javadoc.it + mjavadoc770 + 1.0-SNAPSHOT + jar + + https://issues.apache.org/jira/browse/MJAVADOC-770 + + + UTF-8 + 9 + ${project.build.targetJdk} + ${project.build.targetJdk} + + + + + org.apiguardian + apiguardian-api + 1.1.2 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + default-jar + + + + + mjavadoc770 + + + + + + + + maven-javadoc-plugin + @project.version@ + + + javadoc + + jar + + package + + true + ${project.build.targetJdk} + false + false + false + true + + + + + + + diff --git a/src/it/projects/MJAVADOC-770/src/main/java/mjavadoc770/Main.java b/src/it/projects/MJAVADOC-770/src/main/java/mjavadoc770/Main.java new file mode 100644 index 00000000..3035fd2d --- /dev/null +++ b/src/it/projects/MJAVADOC-770/src/main/java/mjavadoc770/Main.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package mjavadoc770; + +/** + * This is the main class. + */ +public final class Main { + /** + * This is the main method. + * + * @param args The arguments + * @throws Exception if something goes wrong + */ + public static final void main(String ... args) throws Exception { + System.out.println("Hello, World!"); + } +} diff --git a/src/it/projects/MJAVADOC-770/verify.groovy b/src/it/projects/MJAVADOC-770/verify.groovy new file mode 100644 index 00000000..165abb14 --- /dev/null +++ b/src/it/projects/MJAVADOC-770/verify.groovy @@ -0,0 +1,23 @@ +/* + * 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. + */ + +// new style javadoc has a module summary. legacy mode has not. +def moduleFile = new File( basedir, 'target/apidocs/mjavadoc770/module-summary.html') + +assert !moduleFile.exists() 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 18fea1cc..5ff756b7 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java @@ -841,6 +841,16 @@ public abstract class AbstractJavadocMojo extends AbstractMojo { @Parameter(property = "verbose", defaultValue = "false") private boolean verbose; + /** + * Run the javadoc tool in pre-Java 9 (non-modular) style even if the java version is + * post java 9. This allows non-JPMS projects that have moved to newer Java + * versions to create javadocs without having to use JPMS modules. + * + * @since 3.5.1 + */ + @Parameter(property = "legacyMode", defaultValue = "false") + private boolean legacyMode; + // ---------------------------------------------------------------------- // Standard Doclet Options - all alphabetical // ---------------------------------------------------------------------- @@ -2068,7 +2078,9 @@ protected Map> getFiles(Collection sourcePaths) t } else if (source != null) { autoExclude = JavaVersion.parse(source).isBefore("9"); } else { - autoExclude = false; + // if legacy mode is active, treat it like pre-Java 9 (exclude module-info), + // otherwise don't auto-exclude anything. + autoExclude = legacyMode; } for (Path sourcePath : sourcePaths) { @@ -4383,11 +4395,16 @@ private void addJavadocOptions( Map allModuleDescriptors = new HashMap<>(); - boolean supportModulePath = javadocRuntimeVersion.isAtLeast("9"); - if (release != null) { - supportModulePath &= JavaVersion.parse(release).isAtLeast("9"); - } else if (source != null) { - supportModulePath &= JavaVersion.parse(source).isAtLeast("9"); + // do not support the module path in legacy mode + boolean supportModulePath = !legacyMode; + + if (supportModulePath) { + supportModulePath &= javadocRuntimeVersion.isAtLeast("9"); + if (release != null) { + supportModulePath &= JavaVersion.parse(release).isAtLeast("9"); + } else if (source != null) { + supportModulePath &= JavaVersion.parse(source).isAtLeast("9"); + } } if (supportModulePath) {