2016-05-13 7 views
0

さまざまなスタックスレッドを検索し、回答を見つけられない半日後、私は自分自身に質問しようとします。1つのクラスで最初からjarを作成する

以下の方法では、以下の操作が行われます。 プロジェクトでは、Aというクラスがあります。このクラスはプロジェクトでは使用されていません。テストファイルを作成してjavafxウィンドウを表示するにはmain()の内側と小さなコードがあります。メソッドのエクスポートによって、そのクラスを持つjarファイルが作成され、メインクラスとしてマークされます。 私はlib.jarをoutput.jarファイルにスラップする方法を探しています。 output.jarは起動時にjavafxウィンドウを表示せず、テストファイルを作成するので、その原因を知っていれば気軽に投稿できます。 :)

public void export() { 
    Manifest man = new Manifest(); 
    man.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); 
    man.getMainAttributes().put(Attributes.Name.CLASS_PATH, ". mylib.jar"); 
    man.getMainAttributes().put(Attributes.Name.MAIN_CLASS, A.class.getName()); 
    try { 
     JarOutputStream f = new JarOutputStream(new FileOutputStream("output.jar"), man); 
     InputStream c = getClass().getResourceAsStream("A.class"); 
     JarEntry e = new JarEntry("A.class"); 
     f.putNextEntry(e); 
     byte[] buffer = new byte[1024]; 
     while (true) { 
      int count = c.read(buffer); 
      if (count == -1) 
       break; 
      f.write(buffer, 0, count); 
     } 
     f.closeEntry(); 
     JarEntry cp = new JarEntry(".classpath"); 
     f.putNextEntry(cp); 
     String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
        + "<classpath>" 
        + "<classpathentry kind=\"src\" path=\"src\"/>" 
        + "<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>" 
        + "<classpathentry kind=\"lib\" path=\"mylib.jar\"/>" 
        + "<classpathentry kind=\"output\" path=\"bin\"/>" 
        + "</classpath>"; 
     f.write(s.getBytes()); 
     f.closeEntry(); 
     f.close(); 
    } catch (IOException e) {} 
} 

お気軽にご質問ください。

答えて

1


JarEntry e = new JarEntry("A.class");
これは、瓶の中の右のパッケージ/ディレクトリ構造の下で、あなたのA.classを置く

JarEntry e = new JarEntry(SimpleJava.class.getName().replace('.', '/') + ".class");
に...変更、あなたのAクラスがパッケージの下にあると仮定すると。

ファイルエンコーディングが一致しない場合、XMLパーサーはファイルの読み取りに問題があります。したがって、.classpathファイルに記載されているXMLエンコーディングと一致させるには、f.write(s.getBytes());f.write(s.getBytes("UTF-8"));

に更新することをお勧めします。

+0

良い点、ありがとう:) – Poody

+0

実行可能なjarファイルのために.classpathファイルが必要であるとは確信していません。 – Poody

+0

正しいですが、.classpathはjarファイルに存在する必要はありません。私の答えを訂正し、ファイル名に ".class"を加えました。 –

関連する問題