java - 使用Google Guava时打包JAR的主类抛出错误

标签 java maven guava

我创建了一个新项目来设置 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/

相关文章:

java - 通过 IntelliJ 运行配置运行 Spring boot

java - 操作系统版本范围的 Maven 配置文件

java - 从 Guava Multimap 中的值返回键

Java CompletableFuture 链调用接口(interface)

java - AddTextChangedListener 到循环生成的 EditText View

java - IntelliJ GUI Designer Maven 可执行 JAR 导出

java - Guava eventbus 有订阅者吗?

guava - 我在哪里可以找到 Guava 中的原始数组?

java - 无法禁用 Hibernate 日志消息

java - Eclipse 插件 : Passing command line arguments