从Eclipse导出jar时“无法从给定的启动配置中找到main方法”错误

时间:2010-11-06 22:20:14

标签: java eclipse build jar export

我使用Eclipse作为IDE开发了我的程序。我曾经使用File|Export| Runnable JAR file选项为客户创建dist构建。

我在eclipse中使用Run或(通常)调试按钮处理项目(所以我使用有效的main方法配置项目)。

不幸的是,当我昨天创建构建时,当我尝试运行app时出现以下错误:

Failed to load Main-Class manifest attribute from My.jar

然后当我重试导出时,我在导出日志中发现了以下问题:

Could not find main method from given launch configuration

我不知道是什么原因造成了这个问题。我想我的项目配置中没有任何改变。我正在测试我的构建,所以我确定这个选项以前都能正常工作。

我将不胜感激。

4 个答案:

答案 0 :(得分:5)

您是否在导出对话框中选择了正确的“启动配置”?确保它来自你的项目。

此外,一旦导出,您可以解压缩jar文件并查看'META-INF / MANIFEST.MF'文件 - 应该有'Main-Class'条目,其中包含main()方法所在类的完全限定名称。

答案 1 :(得分:2)

我遇到了这个问题,其他选项都没有。甚至删除并开始使用新工作区。在我的情况下,问题是我没有手动将我的项目的“classes”目录添加到我用来调试java应用程序的调试配置的类路径中。我不知道为什么它没有自动选择类目录作为我运行应用程序的项目的一部分。无论如何,它在那之后再次开始工作。

答案 2 :(得分:2)

刚出现同样的问题:s 它很烦人,但很容易手动修复清单文件。

  1. 使用winrar或7zip打开.jar文件。
  2. 找到清单文件(META-INF文件夹)
  3. 将其改为此。
  4. var statistics = require('math-statistics'); var usonic = require('r-pi-usonic'); var fs = require("fs"); var path = require("path"); var jsdom = require("jsdom"); var htmlSource = fs.readFileSync("../index.html", "utf8"); var init = function(config) { usonic.init(function (error) { if (error) { console.log('error'); } else { var sensor = usonic.createSensor(config.echoPin, config.triggerPin, config.timeout); //console.log(config); var distances; (function measure() { if (!distances || distances.length === config.rate) { if (distances) { print(distances); } distances = []; } setTimeout(function() { distances.push(sensor()); measure(); }, config.delay); }()); } }); }; var print = function(distances) { var distance = statistics.median(distances); process.stdout.clearLine(); process.stdout.cursorTo(0); if (distance < 0) { process.stdout.write('Error: Measurement timeout.\n'); } else { process.stdout.write('Distance: ' + distance.toFixed(2) + ' cm'); call_jsdom(htmlSource, function (window) { var $ = window.$; $("h6").replaceWith(distance.toFixed(2)); console.log(documentToSource(window.document)); }); } }; function documentToSource(doc) { // The non-standard window.document.outerHTML also exists, // but currently does not preserve source code structure as well // The following two operations are non-standard return doc.doctype.toString()+doc.innerHTML; } function call_jsdom(source, callback) { jsdom.env( source, [ 'jquery-1.7.1.min.js' ], function(errors, window) { process.nextTick( function () { if (errors) { throw new Error("There were errors: "+errors); } callback(window); } ); } ); } init({ echoPin: 15, //Echo pin triggerPin: 14, //Trigger pin timeout: 1000, //Measurement timeout in µs delay: 60, //Measurement delay in ms rate: 5 //Measurements per sample });

    在我的情况下,我将它放在默认包中。

    Manifest-Version: 1.0 main-class: (package).(main-class)

答案 3 :(得分:0)

如果在“启动”配置中找不到类文件,请右键单击项目->以Java应用程序运行。现在再次导出。