"没有主要的清单属性"用Java下载.jar文件后

时间:2016-04-25 23:04:03

标签: java jar manifest

我对这个问题非常困惑。在运行此代码的前几次没有发生,但在那之后,我无法再次运行它。它只在使用我的Java代码下载后才会中断。我从我的网站下载了一个jar文件,然后使用ProcessBuilder来运行它。这一切都很好,前几次,但我跑了几次,它开始给我

  

没有主要的清单属性,在... \ AppData \ Local \ GDRQ \ bin \ launch_gdbotbin.jar

这是我用来下载和运行jar文件的java代码:

try {
        System.out.println("starting update...");

        File targetFile = new File(System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\downloading\\launch_gdbotbin.jar");
        URL downloadUrl = new URL("http://www.dropmoose.com/gdbotpro/launch_gdbotbin.jar");

        InputStream inStream = downloadUrl.openStream();
        //System.out.println(inStream.available());
        BufferedInputStream bufIn = new BufferedInputStream(inStream);
        OutputStream out = new FileOutputStream(targetFile);
        BufferedOutputStream bufOut = new BufferedOutputStream(out);
        byte[] buffer = new byte[inStream.available()];

        while (true) {
            int nRead = bufIn.read(buffer, 0, buffer.length);

            if (nRead <= 0) {
                break;
            }

            bufOut.write(buffer, 0, nRead);
        }

        bufOut.flush();
        out.close();
        inStream.close();

        BufferedWriter bw = new BufferedWriter(new FileWriter(settingsFile));
        for (int i = 0; i < settings.size(); i++) {
            bw.write(settings.get(i));
            bw.newLine();
        }

        bw.close();
        System.out.println("update successful");
        infoPane.dispose();

        System.out.println("cleaning up...");
        Files.move(targetFile.getAbsoluteFile().toPath(), new File(System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\bin\\launch_gdbotbin.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
        JOptionPane.showConfirmDialog(null, "An error occured (code 14): Unable to update!");
        infoPane.dispose();
    }

String[] parm = {"jar", "-jar", System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\bin\\launch_gdbotbin.jar"};

ProcessBuilder pb = new ProcessBuilder(parm);
    pb.redirectOutput(Redirect.INHERIT);
    pb.redirectError(Redirect.INHERIT);

    try {
        pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

我尝试创建一个MANIFEST.MF文件,其中Class-Path作为具有main(String [] args)方法和Manifest-Version:1.0的类,但它仍然无法正常工作。我做错了什么,为什么我的manifest.mf文件不起作用?当原始代码为2.5 MB时,代码下载的jar也大约为125KB。

编辑如果您转到下载jar文件然后运行它的代码中的url,它运行得非常好。

编辑2 我甚至尝试使用WinRAR进入下载的jar文件并手动更改META-INF / MANIFEST.MF文件以正确设置Main-Class,然后执行此操作仍然没有跑。

编辑3 清单问题消失了。但是现在我在加载引用的库时遇到了问题。我正在使用PircBotX并在运行jar文件时(使用String [] parm = {&#34; java&#34;,&#34; launch_gdbotbin.jar&#34;,&#34; gd.bot.main.BotHandler& #34;})它抛出ClassNotFoundException。

编辑4 即使在我做了Micheal Markidis建议的事情之后,它又开始给我一个no main manifeset属性错误。

1 个答案:

答案 0 :(得分:0)

我实际上可以让你的代码运行:

我改变了我的环境:

  1. 我拿出了写入设置文件的代码
  2. 我拿出了移动代码

    Files.move(targetFile.getAbsoluteFile()。toPath(),new File(System.getProperty(&#34; user.home&#34;)+&#34; \ AppData \ Local \ GDRQ \ bin \ launch_gdbotbin .jar&#34;)。toPath(),StandardCopyOption.REPLACE_EXISTING);

  3. 您需要

    String [] parm = {&#34; java &#34;,&#34; -jar&#34;,System.getProperty(&#34; user.home&#34; )+&#34; path / to / your / file / launch_gdbotbin.jar&#34;};

  4. 我得到这个enter image description here

    1. 我会尝试复制我所做的,然后逐步放回我删除的其他代码。
    2. 注意:暂时只需手动删除launch_gdbotbin.jar。