【问题标题】:java.lang.ClassNotFoundException even though I specify -cp argument to the class file [duplicate]java.lang.ClassNotFoundException 即使我为类文件指定了 -cp 参数[重复]
【发布时间】:2014-07-23 04:53:08
【问题描述】:

我不确定我为什么会遇到这个问题。这是我在 linux 命令行上运行的:

sudo java -jar gs-rest-service-0.1.0.jar -cp ./hello
java.lang.ClassNotFoundException: hello.Application

sudo java -jar gs-rest-service-0.1.0.jar -cp hello
java.lang.ClassNotFoundException: hello.Application

尝试了两种方式,使用 ./ 和不使用。也试过这样:

sudo java -jar gs-rest-service-0.1.0.jar -cp ./main/java/hello
java.lang.ClassNotFoundException: hello.Application

同样有和没有 ./.当我查看 jar 文件时,我看到 main/java/hello 中的 Application.class 文件都是小写的。这是我的 MANIFEST.MF

Manifest-Version: 1.0
Class-Path: ./hello

更新:开始工作了。在这里,我的 pom.xml 文件中有一个问题,我已将 start-class 指定为 hello.Application 但我的包名我一直在弄乱,所以它们永远不会同步,并且添加 -cp 没有帮助,因为现在我会有在类中打包一个东西,在 pom.xml 中打包另一个,-cp 甚至在命令行上的错误位置!啊..只是一个愚蠢的夜晚。

这是工作代码:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.0.2.RELEASE</version>
</parent>

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

<properties>
    <start-class>main.java.hello.Application</start-class>
</properties>

<build>
    <plugins>
    <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.3.2</version> 
    </plugin>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
</build>

<repositories>
    <repository>
    <id>spring-snapshots</id>
    <url>http://repo.spring.io/libs-snapshot</url>
    <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
    <id>spring-snapshots</id>
    <url>http://repo.spring.io/libs-snapshot</url>
    <snapshots><enabled>true</enabled></snapshots>
    </pluginRepository>
</pluginRepositories>
</project>

Application.java:

package main.java.hello;


import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
@EnableAutoConfiguration
public class Application {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
}

所有其他 java 文件都具有在 eclipse IDE 中指定和使用的相同包名。为了摆脱在我用这个参数运行 maven 的所有东西上显示红色 X 的 IDE:

mvn dependency:copy-dependencies

正如这里这个精彩的问题所述:

Downloading all maven dependencies to a directory NOT in repository?

下载后,我创建了一个用户库,并从 maven 下载后创建的依赖目录中提取了所有 jar 文件。以为我会将其添加到问题中。有点超出范围,但有助于摆脱在编辑愚蠢的简单 hello world web 服务时出现的 IDE 中的进一步错误。

【问题讨论】:

  • 查看了 Jarrod Roberson 引用的问题,但信息很少,不包括代码或清单内容。看不出它是一个很好的替代品,但没关系。可能是我的小脑袋没有得到它的能力

标签: java spring


【解决方案1】:

你需要指定一个主类。

sudo java -cp gs-rest-service-0.1.0.jar -cp ./main/java hello.Application

-jar 标志告诉 Java 运行该 jar 中引用的主类。

【讨论】:

  • 更新问题以包含 application.java 文件。它在其中指定了静态 main。还是不行,试着在那里运行你的语句
  • 再次更新问题以包含结果。哦,呃,我那里有一个斜线
  • @JKK 我也没有做-jar。在尝试让清单工作之前,我会先让无聊的版本工作。
  • sudo java -cp gs-rest-service-0.1.0.jar -cp ./main/java hello.Application 错误:找不到或加载主类 hello.Application
  • ./main/java/hello中是否有名为Application.class的文件?
【解决方案2】:

您将 jar 添加到类路径中,然后像这样运行它 -

sudo java -cp gs-rest-service-0.1.0.jar hello.Application

如果可以在jar文件MANIFEST.MF中添加"Main-Class" entry

Main-Class: hello.Application

那么你也可以在不指定“hello.Application”的情况下运行它(使用“-jar”)-

sudo java -jar gs-rest-service-0.1.0.jar

【讨论】:

    【解决方案3】:

    我在这里猜测了一下,但是看到 Spring 注释及其自动查找类的能力,

    sudo java -cp ./main/java -jar gs-rest-service-0.1.0.jar 
    

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多