Java 使用外部Jar文件中的Main方法从项目构建可运行的Jar
我的教授已经决定为这个任务提供一个带有主方法的外部jar,我们应该为后端编写代码。我将这个jar放入我的项目并让它在Eclipse中运行没有问题,但是当我尝试导出一个可运行的jar时,我得到了以下错误: “无法从给定的启动配置中找到主方法” 这看起来很可笑,因为每当我在Eclipse中运行它时,它肯定能找到主方法,我缺少了什么?我尝试打开jar以获取Manifest.mf文件,并为其提供外部jar中主要的类的名称,但它仍然找不到它 我已经将jar添加到项目构建路径和类路径中,但这似乎没有什么区别 清单文件只是说:Java 使用外部Jar文件中的Main方法从项目构建可运行的Jar,java,eclipse,jar,classpath,external,Java,Eclipse,Jar,Classpath,External,我的教授已经决定为这个任务提供一个带有主方法的外部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,为什么要这样做呢?类路径为“.”在清单中,您需要将您的教授提供的jar放在您试图运行创建的jar的同一目录中。否则,可能有一种方法可以告诉eclipse/ant包含所有依赖项 -更新- 因为您使用的是依赖项中的Main方法,所以应该在ant构建xml中指定以下内容,然后重新构建
filesetmanifest="merge"
这将在另一个清单的主要部分合并到新jar的清单中。类路径为“.”在清单中,您需要将您的教授提供的jar放在您试图运行创建的jar的同一目录中。否则,可能有一种方法可以告诉eclipse/ant包含所有依赖项 -更新- 因为您使用的是依赖项中的Main方法,所以应该在ant构建xml中指定以下内容,然后重新构建
filesetmanifest="merge"
这将在另一个清单的主要部分合并到新jar的清单中。有几种独立于Eclipse运行程序的方法:
java -jar MyJar.jar
这假设您在清单文件中设置了Main Class属性。如果没有,则可以手动指定主类:
java -jar MyJar.jar MainClass
b。对于两个jar,您只需确保第二个jar包含在类路径中:
java -jar ProfsJar.jar -cp MyJar.jar
同样,如果需要,可以手动指定主类:
java -jar ProfsJar.jar -cp MyJar.jar MainClass
有几种独立于Eclipse运行程序的方法:
java -jar MyJar.jar
这假设您在清单文件中设置了Main Class属性。如果没有,则可以手动指定主类:
java -jar MyJar.jar MainClass
b。对于两个jar,您只需确保第二个jar包含在类路径中:
java -jar ProfsJar.jar -cp MyJar.jar
同样,如果需要,可以手动指定主类:
java -jar ProfsJar.jar -cp MyJar.jar MainClass
但是在创建的jar内部是从外部jar解包/重新打包的类文件。为什么不直接用这些呢?嗯,是的,那样的话,我想应该能用。您是创建了自己的Main方法,还是使用了professor's jar中提供的Main方法?如果您可以编辑该ant文件,请将文件filesetmanifest更改为filesetmanifest=“merge”,然后重新运行,看看这会不会改变什么。professor's jar和@aglassman中提供的Main我很想尝试一下,但我不知道如何使用ant文件在Eclipse中构建项目:(ant文件生成后存储在哪里?如果您可以在eclipse中看到它,您应该能够右键单击它,然后选择Run As>ant build。但是在创建的jar中是来自外部jar的解包/重新打包类文件。为什么它不使用这些文件呢?嗯,是的,在这种情况下它应该可以工作。您创建了自己的jar吗n Main方法,或者您正在使用professor's jar中提供的Main方法?如果您可以编辑该ant文件,请将文件filesetmanifest更改为filesetmanifest=“merge”然后重新运行,看看这是否会改变什么。professor's jar和@aglassman中提供的Main我很想尝试一下,但我不知道如何使用ant文件在Eclipse中构建项目:(ant文件生成后存储在哪里?如果您可以在eclipse中看到它,您应该能够右键单击它,然后选择Run As>ant build。我知道这些方法,但我的问题是为什么eclipse不正确地构建jar文件。根据您的3)“这还假设在jar的清单中正确设置了Main Class属性”当我试图构建一个必须使用外部jar作为主jar的可运行jar时,为什么Eclipse没有正确设置它?@user1684045我不使用Eclipse,所以我不能开始猜测这个行为。我的答案是为了回答你的问题(在评论中)关于在没有Ant的情况下运行程序。也许我误解了。(这个答案可能仅在原始问题的上下文中没有意义。)。。