使用 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>