在编程创建的jar中包含外部库

时间:2016-07-21 13:10:54

标签: java jar

我有一个使用jaroutput流创建的java程序。输出jar使用外部库。

起初我以为我可以在清单中使用classpath来获取jar中的外部库。 然后我发现那不起作用。

然后我想到了自定义类加载器,例如one-jar。 但是我试图让它在一个生成的jar中工作而陷入困境。

如果你想知道,外部库是jsonsimple 1.1.1。

以下是生成的自定义jar的代码。

    public void run(String output) throws IOException {
      Manifest manifest = new Manifest();
      manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
      manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, "Install");
      manifest.getMainAttributes().put(Attributes.Name.CLASS_PATH, "json-simple-1.1.1.jar");
      JarOutputStream target = new JarOutputStream(new FileOutputStream(output), manifest);
      add(tempclass, target,"Install.class");
      add(tempjar, target,"lib/json-simple-1.1.1.jar");
      if (resourcepackzip != null) {
          add(resourcepackzip, target,resourcepackzip.getName().toString()); 
      }
      if (optionstxt != null){
          add(optionstxt, target,optionstxt.getName().toString());
      }
      add(worldzip, target,worldzip.getName().toString());
      add(temptxt, target,temptxt.getName().toString());
      target.close();
    }

    @SuppressWarnings("resource")
    private void add(File source, JarOutputStream target,String source2) throws IOException
    {
      BufferedInputStream in = null;
      try
      {
        if (source.isDirectory())
        {
          String name = source.getPath().replace("\\", "/");
          if (!name.isEmpty())
          {
            if (!name.endsWith("/"))
              name += "/";
            JarEntry entry = new JarEntry(name);
            entry.setTime(source.lastModified());
            target.putNextEntry(entry);
            target.closeEntry();
          }
          for (File nestedFile: source.listFiles())
            add(nestedFile, target, nestedFile.getName().toString());
          return;
        }

        JarEntry entry = new JarEntry(source2);
      entry.setTime(source.lastModified());
       target.putNextEntry(entry);
        in = new BufferedInputStream(new FileInputStream(source));

        byte[] buffer = new byte[1024];
        while (true)
        {
          int count = in.read(buffer);
          if (count == -1)
            break;
          target.write(buffer, 0, count);
        }
      }finally {

      }
    }

那么无论如何我可以在用jaroutputstream制作的jar中包含json吗?

0 个答案:

没有答案