当前位置: 首页 > 知识库问答 >
问题:

JAR文件执行:找不到/加载主类

赫连方伟
2023-03-14
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
        </configuration>

    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathLayoutType>custom</classpathLayoutType>
                    <customClasspathLayout>lib/${artifact.artifactId}${artifact.dashClassifier?}-${artifact.version}.${artifact.extension}</customClasspathLayout>
                    <mainClass>mypkg.Main</mainClass>
                </manifest>
                <manifestEntries>
                    <Class-Path>. ${project.build.directory}\resources ${project.build.directory}\lib</Class-Path>
                </manifestEntries>
            </archive>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}\lib</outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
            <execution>
                <id>copy-resources</id>
                <phase>validate</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}\resources</outputDirectory>
                    <resources>
                        <resource>
                            <directory>src/main/resources</directory>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>
package mypkg;

import java.io.IOException;

public class Main {

    public static void main(String[] args)
            throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {

 .......
 .......
}
}

jar是用“meta-inf”文件夹中的清单文件创建的。清单文件(为了查看目的删除了类路径中的一些jar条目):

Manifest-Version: 1.0
Built-By: userName
Class-Path: . D:/project2/mypkg/target/ D:/project2/mypkg/target/resources D:/project2/mypkg/target/lib lib/hive-jdbc.jar lib/hive-common.jar lib/commons-lang.jar 
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_101
Main-Class: mypkg.Main

文件夹结构:

folder-
       -lib
            -(all the jar files)
       -resources
            -(properties file)
       -application.jar

我正在命令提示符下使用'java-jar application.jar mypkg.main'。

有人能告诉我是什么造成的错误和如何解决它吗?

共有1个答案

聂翼
2023-03-14

终于找到了解决办法。只需要在清单文件中做一些修改。罐子的版本不见了。

最终清单文件(为了查看目的,删除了类路径中的一些jar条目)::

Manifest-Version: 1.0
Built-By: userName
Class-Path: lib/hive-jdbc-1.1.0.jar lib/hive-common-1.1.0.jar 
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_101
Main-Class: mypkg.Main

请注意:通配符(例如“lib/*”)在清单文件(Java6及以上版本)中的'class-path'头中不起作用。

 类似资料:
  • 我已经使用netbeans制作了jar文件,使用Build和Clean项目选项。我得到了.jar文件,现在当我执行它一小段时间后,cmd窗口出现,并给出一个错误:“Could not find or load main class while executing jar file” 但是,如果我使用命令提示符Java-jar执行jar,它可以正常工作 Netbeans的输出为: 而在jar文件中,

  • 我知道这是一个常见的问题,但我已经尝试了很多事情来使这起作用。 主类名:Test 我包含了带有属性的,如下所示: null 在我的部署简介中,我包括: lib目录 文件的组贡献者(,我正在使用的一个外部)的所有合并内容 注意:我使用的是JDeveloper12c IDE 无法运行jar文件:无法找到或加载主类Hello

  • 首先,我知道这个问题经常被问到。但我的问题不同,所以请耐心看完整的描述。 而且布景似乎还不错。以前对我有用。但我运行了构建的jar,它表明“无法运行或加载主类”。 我发现如果我删除这些文件除了Manifest.mf。它可以很好地工作。我不知道设置有什么不同。 重建项目或重建工件jar。 但不是所有的方法都能奏效。并且我尝试在intellij中用相同的设置在MAC OS和windows OS中构建j

  • 在完成spring-boot服务器之后,我想将它变成一个jar,以便可以将它部署在远程服务器上。我选择使用maven完成此操作 在.jar-with-dependecies.jar创建之后,我将其上载到服务器上并尝试运行 和其他人一样 链接2 链接3 链接4 mvn命令: 这也不起作用:

  • 我有独立的应用程序,它绑定在可执行的中。在可执行的清单文件中,有一个class-path条目,其中列出了所有依赖的(包括所有的日志实现jar)。这个可执行jar还包含文件。 使用这种结构,当我使用简单的命令运行应用程序时,应用程序在正确的日志记录下运行良好。但这里的主要问题是,要更改日志级别,需要打开jar文件,而我不能要求客户端这样做。所以我将放在了jar外部,但现在所有日志记录都发生在控制台上

  • 你好,我有一个奇怪的问题。我正在用eclipse打包一个应用程序,以生成一个可执行的jar文件,当我运行它时,会出现错误“error cant find main class[…]”。 当我从命令行示例运行同一个包时 java-jarapp.jar 程序启动。 奇怪的是,只有在Java 7环境中编译的应用程序才会出现错误。 如果我将项目设置为java 6,一切都正常。 我应该做什么来运行Java