即使没有(公共)Javadoc,如何强制使用 javadoc jar?

Ben*_*ema 5 java javadoc maven

我有一个 Maven 多模块项目,其中一些子模块仅供内部使用。我不想为其发布任何可见的 Javadoc,因为它不应该由第三方直接使用。其中没有一个公共包(包名称本身类似于 abcinternal.d)。

但是,要将 jar 发布到 Maven Central,OSS Sonatype 要求所有库 jar 都具有随附的源代码和 javadoc jar。

如何强制使用固定索引创建 javadoc jar 或以便告诉子模块的用途?我想到了 package-info.java,但我没有公共包(所有带有“internal”一词的包都被忽略)。

Ben*_*ema 0

不要使用 Javadoc 工具生成包含非标准内容的 jar:使用maven-jar-plugin来手动创建一个。

初始解决方案取自https://vzurczak.wordpress.com/2014/08/01/generate-an-empty-javadoc-jar-file/

这是我最终确定的解决方案,当在父 pom 中配置时,它通常适用于所有子模块:

定义两个配置文件:

  • 如果子模块中不存在自定义 javadoc 文件夹(缺少 src/main/javadoc),则执行标准 javadoc 插件
  • 如果子模块中存在自定义 javadoc 文件夹(存在 src/main/javadoc),则通过 jar 插件执行自定义 javadoc

Maven 配置:

<profiles>
    <profile>
        <id>standard-javadoc</id>
        <activation>
            <file><missing>src/main/javadoc</missing></file>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <show>public</show>
                                <failOnError>false</failOnError>
                                <detectOfflineLinks>false</detectOfflineLinks>
                                <doclint>all,-missing</doclint>
                                <nohelp>true</nohelp>
                                <excludePackageNames>*.internal.*,testutil,demo</excludePackageNames>
                                <quiet>true</quiet>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <failOnError>false</failOnError>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>custom-javadoc</id>
        <activation>
            <file><exists>src/main/javadoc</exists></file>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classifier>javadoc</classifier>
                                <classesDirectory>${project.basedir}/src/main/javadoc</classesDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)