我已经编写了自己的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
它会告诉我太阳包不存在。
错误:包com.sun.javadoc不存在
我认为最后一部分是为什么我无法在jar中找到我的资源的主要原因,因此我的问题是如何告诉maven忽略这些导入。
答案 0 :(得分:0)
问题是maven无法找到java安装目录的/ lib文件夹中tools.jar中的软件包 com.sun.javadoc 。
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 - 摘要:使用每个操作系统的配置文件可以指定正确的路径。
我只需要支持Linux + Windows,这对我来说是最好的解决方案。