我创建了一个新项目来设置 Google Guava。
这是我的 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
的一些依赖项?
最佳答案
您有两个选择:-
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>
关于java - 使用Google Guava时打包JAR的主类抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45150752/