2011-12-15 2 views
4

방금 ​​데이터베이스 용 엔티티 클래스를 생성하는 간단한 Java 응용 프로그램을 만들었습니다. 내 로컬 디스크에 저장할 자바 클래스. 지금까지 모든 것이 잘 작동합니다.런타임 동안 JAR 파일 생성

이제 주 응용 프로그램 내의 해당 Java 클래스에서 JAR 파일을 genereate하고 싶습니다. 나도 jar 파일을 조작 할 수 있으며 런타임 중에 jar 파일에 클래스를 추가하는 방법에 대해서도 읽었습니다.

하지만 제 경우에는 빌드 경로에 클래스가 없습니다. 내가 필요한 것은 내 방금 만든 자바 파일에서 클래스 파일을 만들어 내 jar 파일에 넣는 것입니다.

Java 응용 프로그램 내에서 가능합니까?

내가 그 일을하는 이유는 우리 데이터베이스가 항상 많은 사람들에 의해 확장 될 것이므로 수동으로 해당 필드를 내 엔티티에 추가하고 싶지 않기 때문입니다. 그래서 우리 데이터베이스에서 systables를 스캔하고 그 정보로부터 자바 엔티티 파일을 생성하는 어플리케이션을 만들고 싶었습니다. 하지만 지금은 그들을 생성 한 후 클래스 파일에 자바 파일을 컴파일하고 내 마지막 항아리 파일에 추가해야합니다.

이 문제에 대한 도움과 정보를 제공해 주셔서 감사합니다.

많은 인사, 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를 참조하십시오. 예를 들어 : 물론

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 filemanifest 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