我的项目可以从源代码中自动生成一些额外的帮助文件。
如何让maven将这些文件安装到生成的JavaDoc包中?
我无法找到如何让Maven:
运行一些类来生成其他文档,例如:编译并启动src/main/java/mypackage/ListOptions.java
又名mypackage.ListOptions
以生成所有可用选项/模块/示例/等的列表。
安装输出文件(我只能让Maven将文件从src/main/javadoc/resources
安装到site/apidocs/resources
子文件夹中;但我希望此文档存在于顶级site/apidocs
文件夹;更确切地说,我根本不关心site
部分,而是关注mypackage-0.1.0-SNAPSHOT-javadoc.jar
中的完整文档;包括从javadoc链接的非Javadoc生成的辅助信息。
最小示例 - maven的插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<docfilessubdirs>true</docfilessubdirs>
</configuration>
</plugin>
目录布局:
./pom.xml
./src/main/java/foobar/GenerateNonstatic.java
./src/main/javadoc/staticfile.js
./src/main/javadoc/resources/insubfolder.png
mvn package
在./target/apidocs
和./target/foobar-0.0.1-SNAPSHOT-javadoc.jar
中生成:javadoc。文件target/apidocs/resources/insubfolder.png
最终位于文件夹target/apidocs/resources
(以及.jar
),但未安装staticfile.js
。
如何运行GenerateNonstatic.java
让javadoc .jar
中包含的输出对我来说还不清楚。我没有看到一个拥有exec的钩子:exec它在 javadoc后运行,而 ./target/foobar-0.0.1-SNAPSHOT-javadoc.jar
之前构建 ...
答案 0 :(得分:2)
埃里克,
如果您对修改javadoc可执行文件感到不舒服,另一个选择是将您的javadoc调用拆分为两个单独的步骤(javadoc和jar),并通过<phase>
标记操作Maven构建生命周期来在它们之间进行调用:
注意:使用exec:java,而不是exec:exec来运行java类
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>generate-javadocs</id>
<phase>generate-sources</phase>
<goals>
<goal>javadoc</goal>
</goals>
</execution>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<id>generate-nonstatic-javadocs</id>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>foobar.GenerateNonstatic</mainClass>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:1)
长话短说。 javadoc:javadoc
和javadoc:jar
mojos都有其缺点。第一个是建立用于报告的javadoc;后者将构建javadoc(进入不同的目录)并生成一个jar包。
由于这一点,一些建议的答案效果不佳 - 他们会两次执行javadoc。
但我注意到 javadoc并不关心文件夹是否已存在或包含文件。
所以我的解决方案很简单:在prepare-package
中生成所需的其他文件,常规的javadoc:jar
任务会添加常规的javadoc并很好地保护它。
只要您不打算修改由javadoc 生成的文件,这将会有效<(我很幸运,不是 - 我只是添加其他文档。
结果pom.xml
是这样的:
<plugins>
<!-- copy additional javadoc resources -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/apidocs</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/javadoc</directory>
<excludes>
<!-- overview.html is integrated by javadoc -->
<exclude>${basedir}/src/main/javadoc/overview.html</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Generate additional files for javadoc -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<id>generate-extra-javadoc</id>
<phase>prepare-package</phase>
<goals>
<!-- java is okay, but you only can have one -->
<goal>exec</goal>
</goals>
<configuration>...</configuration>
</execution>
</executions>
</plugin>
<!-- Build JavaDoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
答案 2 :(得分:0)
回答第一个问题:使用Exec-Maven-Plugin运行命令行命令或使用Maven-Ant-Plugin并嵌入自定义任务。
答案 3 :(得分:0)
埃里克,
你的榜样确实很有帮助。在提出问题时,请尽量提供具体的例子。
最简单的方法是编写自己的Alternate Javadoc tool并通过<javadocExecutable>
标记将其传递给Maven。此示例来自上面的链接:
<project>
...
<reporting> (or <build>)
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<javadocExecutable>C:\jdk1.6.0\bin\javadoc.exe</javadocExecutable>
...
</configuration>
</plugin>
...
</plugins>
</reporting> (or </build>)
...
</project>
希望有所帮助。