有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我创建了一个新项目来设置谷歌番石榴

这是我的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的一些依赖项


共 (2) 个答案

  1. # 1 楼答案

    看起来google guava本身不在类路径中,请尝试将类路径设置为java命令,如下所示:

    java -jar -classpath .:./{path_to_gauva_jar} target/<name>.Jar
    

    根据您的操作系统更改分隔符

  2. # 2 楼答案

    你有两个选择:

    1)在执行Java命令时,使用-cp或-classpath选项列出所有必需的jar文件

    2)在pom中使用maven shade插件,将所有依赖项包括在jar中。xml

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