我的教授已经决定为这个赋值提供一个外部jar的主要方法,我们应该为后端编写代码。我将这个jar放入我的项目并让它在Eclipse中运行没有问题,但是当我尝试导出一个可运行的jar时,我得到了这个错误:
“无法从给定的启动配置中找到主要方法”
这看起来很荒谬,因为每当我在Eclipse中运行它时它肯定能找到主要方法,我错过了什么?我已经尝试打开jar来获取Manifest.mf文件,并为它提供外部jar内部主要类的名称,但它仍无法找到它。
我将jar添加到项目构建路径和类路径中,但这似乎没有什么区别。
清单文件只是说:
Manifest-Version: 1.0
Class-Path: .
我认为这是错误的但我该如何正确设置呢?
- 编辑 -
这是我构建时由Eclipse生成的ANT文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project Lab 1">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required -->
<target name="create_run_jar">
<jar destfile="C:/lab.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="edu.wmich.cs1120.la1.solution_gui.MainWindow"/>
<attribute name="Class-Path" value="."/>
</manifest>
<zipfileset excludes="META-INF/*.SF" src="C:/LA1_GUI.jar"/>
<fileset dir="C:/bin"/>
</jar>
</target>
好的,我看到Main-Class属性需要设置为什么,所以当我编辑Manifest.mf以反映它的工作原理时!但我仍然感到困惑,尤其是线条:
filesetmanifest="mergewithoutmain"
zipfileset excludes
如果我为我的项目指定了主要内容,为什么会这样做呢?
答案 0 :(得分:0)
将classpath作为'。'在你的清单中,你需要让你的教授提供的jar在你试图运行你创建的jar的同一目录中。否则,可能有一种方法可以告诉eclipse / ant包含所有依赖项。
-UPDATE- 由于您正在使用依赖项中的Main方法,因此您应该在ant build xml中指定以下内容,然后重新构建。
filesetmanifest="merge"
这将在另一个清单的主要部分合并到您的新jar清单中。
答案 1 :(得分:0)
有几种方法可以独立于Eclipse运行程序:
使用Ant,正如您已经了解的那样。
使用命令行。无论您是将教授的类文件包含在自己的jar文件中,还是有两个独立的jar文件,确切的命令都有所不同:
一个。使用单个jar文件,您可以运行
java -jar MyJar.jar
这假设您在清单文件中设置了Main-Class属性。如果没有,您可以手动指定主类:
java -jar MyJar.jar MainClass
湾使用两个jar,您只需要确保第二个jar包含在类路径中:
java -jar ProfsJar.jar -cp MyJar.jar
同样,您可以根据需要手动指定主类:
java -jar ProfsJar.jar -cp MyJar.jar MainClass
双击操作系统的文件资源管理器。如果您的Java安装已正确配置操作系统,则只需双击jar文件即可。这也假设在jar的清单中正确设置了Main-Class属性。