使用 Google Guava 时打包 JAR 的主要 class 抛出错误
packaged JAR's main class throwing error when using Google Guava
我创建了一个新项目来设置GoogleGuava。
这是我的POM.xml。
<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>InetAddressTest</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
这是我的主要方法。
public static void main(String[] args) throws Exception {
try {
System.out.println(InetAddresses.isInetAddress("127.0.0.1"));
} catch (NoClassDefFoundError exp) {
System.out.println(exp);
}
}
我可以 运行 它在我的 IDE 中。
我可以用mvn package
打包
当我运行它java -jar target/<NAME>.jar
时,它抛出异常java.lang.NoClassDefFoundError: com/google/common/net/InetAddresses
我尝试浏览解决方案。但到目前为止他们还没有奏效。
我猜测(基于其他问题)我缺少 Guava
的一些依赖项?
看起来 google guava
本身不在 class 路径中,请尝试将 class 路径设置为您的 java
命令:
java -jar -classpath .:./{path_to_gauva_jar} target/<name>.Jar
根据您的操作系统更改分隔符。
你有两个选择:-
1) 在执行 Java 命令时使用 -cp 或 -classpath 选项列出所有需要的 jar 文件。
2) 在 pom.xml
中使用 maven shade 插件将所有依赖项包含在 jar 中
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<finalName>uber-${project.artifactId}-${project.version}</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
我创建了一个新项目来设置GoogleGuava。
这是我的POM.xml。
<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>InetAddressTest</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
这是我的主要方法。
public static void main(String[] args) throws Exception {
try {
System.out.println(InetAddresses.isInetAddress("127.0.0.1"));
} catch (NoClassDefFoundError exp) {
System.out.println(exp);
}
}
我可以 运行 它在我的 IDE 中。
我可以用mvn package
当我运行它java -jar target/<NAME>.jar
时,它抛出异常java.lang.NoClassDefFoundError: com/google/common/net/InetAddresses
我尝试浏览解决方案。但到目前为止他们还没有奏效。
我猜测(基于其他问题)我缺少 Guava
的一些依赖项?
看起来 google guava
本身不在 class 路径中,请尝试将 class 路径设置为您的 java
命令:
java -jar -classpath .:./{path_to_gauva_jar} target/<name>.Jar
根据您的操作系统更改分隔符。
你有两个选择:-
1) 在执行 Java 命令时使用 -cp 或 -classpath 选项列出所有需要的 jar 文件。
2) 在 pom.xml
中使用 maven shade 插件将所有依赖项包含在 jar 中<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<finalName>uber-${project.artifactId}-${project.version}</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>