使用 Maven 打包自定义 javadoc doclet
Packaging custom javadoc doclet with maven
我已经编写了自己的 java doclet,并希望将其打包成一个 jar 文件以供日后使用。
我目前正在使用具有这些设置的 Maven 来生成它:
<build>
<finalName>Doclet</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>de.test.tools.doclet.Doclet</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Assembly Plugin -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>de.test.tools.doclet.Doclet</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
问题:
一切都已正确打包到罐子中,但我的资源丢失了。
如果我尝试做一个简单的 mvn package
它告诉我 sun 包不存在。
error: package com.sun.javadoc does not exist
我认为最后一部分是我无法在 jar 中找到我的源代码的主要原因,因此我的问题是如何告诉 maven 忽略这些导入。
问题是maven找不到包com.sun.javadoc,它在java安装的/lib文件夹中的tools.jar目录
Eclipse 能够执行它,因为我将它添加到那里的类路径中,但是 Maven 不知道他可以从哪里获取资源。所以添加以下系统依赖解决了我的问题:
<dependency>
<scope>system</scope>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>YOUR_JAVA_VERSION</version>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
将版本替换为您的版本并确保 java home 在您的环境中已知。
注意:此依赖项在 MacOS 上不起作用。请参阅:JDK tools.jar as maven dependency - 摘要:为每个 OS 使用配置文件以便能够指定正确的路径。
我只需要支持 Linux + Windows 所以这对我来说是最好的解决方案。
我已经编写了自己的 java doclet,并希望将其打包成一个 jar 文件以供日后使用。
我目前正在使用具有这些设置的 Maven 来生成它:
<build>
<finalName>Doclet</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>de.test.tools.doclet.Doclet</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Assembly Plugin -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>de.test.tools.doclet.Doclet</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
问题:
一切都已正确打包到罐子中,但我的资源丢失了。
如果我尝试做一个简单的 mvn package
它告诉我 sun 包不存在。
error: package com.sun.javadoc does not exist
我认为最后一部分是我无法在 jar 中找到我的源代码的主要原因,因此我的问题是如何告诉 maven 忽略这些导入。
问题是maven找不到包com.sun.javadoc,它在java安装的/lib文件夹中的tools.jar目录
Eclipse 能够执行它,因为我将它添加到那里的类路径中,但是 Maven 不知道他可以从哪里获取资源。所以添加以下系统依赖解决了我的问题:
<dependency>
<scope>system</scope>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>YOUR_JAVA_VERSION</version>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
将版本替换为您的版本并确保 java home 在您的环境中已知。
注意:此依赖项在 MacOS 上不起作用。请参阅:JDK tools.jar as maven dependency - 摘要:为每个 OS 使用配置文件以便能够指定正确的路径。
我只需要支持 Linux + Windows 所以这对我来说是最好的解决方案。