2011-12-15 9 views
4

私たちは、データベース用のエンティティクラスを生成する単純なJavaアプリケーションを作成しました。それらのJavaクラスを私のローカルディスクに保存します。 これまでのところすべて正常に動作します。ランタイム中にJARファイルを生成

今、メインアプリケーション内のJavaクラスからJARファイルを生成する必要があります。私はjarファイルを操作できることを知っています。また、実行時にjarファイルにクラスを追加する方法についても読んでいます。

私の場合は、ビルドパスにクラスがありません。私が必要なのは、作成したjavaファイルからクラスファイルを作成し、jarファイルに入れておくことです。

私のJavaアプリケーション内で可能ですか?

私がこれをやっている理由は、私たちのデータベースが多くの人によって常に拡張され、これらのフィールドを手動でエンティティに追加したくないからです。だから私はデータベースからシスタブルをスキャンし、その情報からjavaエンティティファイルを生成するアプリケーションを作成したかったのです。しかし、今私はそれらを生成した後、クラスファイルにそれらのJavaファイルをコンパイルし、最終的なjarファイルに追加する必要があります。

この問題についてのお手伝いや情報をありがとうございます。

多くのご挨拶、 Hauke

+0

"プログラムでJARファイルを作成する方法"を検索してみてください。 ['java.util.jar.JarOutputStream'](http://docs.oracle.com/javase/6/docs/api/java/util/jar/JarOutputStream.html)または[' java.util.zip.ZipOutputStream'](http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipOutputStream.html)を参照してください。 – maerics

答えて

8

は、クラスjava.util.jar.JarOutputStream(およびWeb上の使用の多くの例)を参照してください。たとえば:もちろん

FileOutputStream fout = new FileOutputStream("c:/tmp/foo.jar"); 
JarOutputStream jarOut = new JarOutputStream(fout); 
jarOut.putNextEntry(new ZipEntry("com/foo/")); // Folders must end with "/". 
jarOut.putNextEntry(new ZipEntry("com/foo/Foo.class")); 
jarOut.write(getBytes("com/foo/Foo.class")); 
jarOut.closeEntry(); 
jarOut.putNextEntry(new ZipEntry("com/foo/Bar.class")); 
jarOut.write(getBytes("com/foo/Bar.class")); 
jarOut.closeEntry(); 
jarOut.close(); 
fout.close(); 

は、あなたの可能性の高いファイルシステムを検査し、エントリ名と内容を生成するためのディレクトリとファイル構造を横断するプログラムが、この例では、主要な機能を示しています。例外を正しく処理し、finallyブロックのストリームを閉じることを忘れないでください。

また、manifest fileは、manifest file specificationの書式設定規則を持つテキストファイルである「META-INF/MANIFEST.MF」のエントリにすぎないことに注意してください。

Javaソースファイルをオンザフライでクラスファイルにコンパイルすることは、別の作業であり、それ自体の問題がありますが、クラスjavax.tools.JavaCompilerは良い出発点です。この質問はまた良い紹介です:How do I programmatically compile and instantiate a Java class?

+0

ありがとうございます。それは私を助け、それは今働いている!ありがとう!!! :-) – Hauke

+0

@ Hauke:優秀、嬉しいのは助けてくれた! – maerics

+0

生成されたjarにソースコードをどのように追加できますか? – Gobliins

関連する問題