的pom.xml:如何將tools.jar包含到uberjar中(使用maven-shade-plugin)?
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>test.Test</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
mvn install
成功完成(即Maven的構建過程中看到tools.jar
依賴),但在執行我
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/api/JavacScope
at test.Test.main(Test.java:24)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.api.JavacScope
...
爲什麼需要什麼?這不會讓你的uberjar JVM具體嗎?爲什麼不在運行時發現或使用替代嵌入式javac(如eclipse-jdt)? – 2014-10-01 17:48:53
@JoakimErdfelt好的,如何在運行時發現?在實際問題中,tools.jar是一個遞歸dep,因此我無法替換它。 – leventov 2014-10-01 17:52:54