繁体   English   中英

jar 在我的电脑上找到主要的 class,但在别人的电脑上找不到

[英]jar finding main class on my computer, but not finding on someone else's

我的程序 jar 与 maven 打包在一起。 我设置了清单文件以了解我的主要 class 在哪里。 它在我的机器上执行没有问题。 但是,当我将 jar 给朋友进行 beta 测试时,他们得到了无法找到主要 class 的错误。 我们正在运行相同版本的 JRE

矿: 在此处输入图像描述

他们的: 在此处输入图像描述

这是我为此看到的其他堆栈溢出答案中的建议问题。

我已经解压缩了 jar 以确保清单文件实际上正确设置了主 class 的位置,并且确实如此。 那么这里的问题可能是什么?

编辑:用于构建清单的 pom.xml 的相关部分

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.dreadylocks.MyCloset.MyCloset</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

当我解压 jar 时,这些是 META-INF/MANIFEST.MF 的内容

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: saman
Build-Jdk: 1.8.0_251
Main-Class: com.dreadylocks.MyCloset.MyCloset

项目结构:

在此处输入图像描述

您需要在pom.xml中配置maven-jar-plugin 这个插件负责打包和创建manifest.MF

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            ...
            <configuration>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                  <mainClass>your.package.MainClass</mainClass>
                </manifest>
              </archive>
            </configuration>
            ...
          </plugin>
        </plugins>
      </build>

您的 maven-assembly-plugin 配置看起来不错,但 mainClass package 名称看起来很奇怪。 通常,您不会将 class 名称作为 package 的一部分。

我建议从你的 mainClass package 中删除最后一个“.MyCloset”:

...
<manifest>
    <mainClass>com.dreadylocks.MyCloset</mainClass>
</manifest>
...

也就是说,除非您确实有一个名为 MyCloset 的目录,其中包含您的 MyCloset class。 无论哪种方式,您和您的朋友运行 jar 的位置或方式之间都可能存在差异。

如果您都使用java -jar /path/to/jar/myjar.jar运行,那么您可能正在从com/mydreadylocks/MyCloset运行,而它们正在从com/mydreadylocks运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM