我是java的新手,在执行Class / Jar文件时面临同样的老问题,即收到错误,说明"无法找到或加载主类com.finance.LoanProcessor",其中com.finance .LoanProcessor是我的完全限定类名。我已经创建了许多其他示例项目,我可以在其中执行这两个类/ jar文件。只有这个项目才会导致这个问题。
以下是我从Java教程和StackOverflow解决方案中了解到的这个问题:
注意:我不应该使用' .class'后缀。在命令提示符下,我应该在父文件夹中,其中包含' com'文件夹,以便java命令可以在com / finance目录中导航并执行LoanProcessor类。
注意:我应该位于此jar文件所在的同一目录中。此外,jar应该有META-INF / MANIFEST.MF文件,该文件应该定义Main-Class:com.finance.LoanProcessor属性。
我记住了所有上面的注意事项,并尝试执行我的主要课程和罐子两者,但两者都失败了。虽然其他示例项目在我的同一台笔记本电脑上以相同的方式执行,但只有这个项目出错。我在办公室里问过一些java专家,但是他们也找不到问题。
因此,我现在已经将整个项目上传到关注git存储库:LoanOnboardingProject
社区能否帮助检查项目并提出我缺少的建议?
我做的其他事情很少:
我正在使用IntelliJ IDE。我用IDE创建了带有开箱即用选项的jar,它也给出了同样的错误。 [这个罐子在' out'上面的存储库中的文件夹。]
我已经将上面的项目创建为Maven项目。我使用了&mvn package'用于构建jar的命令,但它给出了相同的错误。 [这个罐子属于'目标'上面的存储库中的文件夹。]
当我在IntelliJ中运行程序时,它运行正常。没问题。
提前多多感谢。非常感谢任何帮助。
答案 0 :(得分:2)
要运行应用程序,您需要将所有必需的类添加到类路径中(使用java命令的-cp参数)。在您的情况下,这将非常复杂,因为您需要添加pom.xml文件中指定的所有依赖项。以及这些依赖所需的所有罐子。那可能是很多jar文件。
你可以使用maven-shade-plugin构建一个包含所有依赖项的jar。
这是一个示例配置(将pom添加到该部分):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.finance.LoanProcessor</Main-Class>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
然后您将能够执行该类(当站在包含pom.xml的目录中时):
java -cp target/LoanOnboardingSystem-1.0-SNAPSHOT.jar com.finance.LoanProcessor
或通过:
java -jar target/LoanOnboardingSystem-1.0-SNAPSHOT.jar
答案 1 :(得分:1)
In you pom.xml replace build with given below. Using maven-shade-plugins.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<keepDependenciesWithProvidedScope>false</keepDependenciesWithProvidedScope>
<promoteTransitiveDependencies>false</promoteTransitiveDependencies>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>false</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
To Execute:
java -cp LoanOnboardingSystem-1.0-SNAPSHOT.jar com.finance.LoanProcessor
答案 2 :(得分:0)
上面提到的答案肯定会解决很多人的问题,它也解决了我的问题。但是,由于我使用的是弹簧启动,因此在运行着色jar时出现了另一个错误:“在META-INF / spring.factories中找不到自动配置类”。
因此,我在StackOverflow本身遇到this链接,解决了上述问题。
有趣的是,现在我只在pom.xml中使用'spring-boot-maven-plugin',而不是'maven-shade-plugin',那么项目jar也会被执行得很好。 Spring-boot-maven-plugin还包含jar文件中所有必需的依赖项,并创建一个比'maven-shade-plugin'创建的jar小的jar。
如果有一天链接出现故障,我也会在这里发布相同的答案:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>