내 Google foo에 문제가 있습니다. 어노테이션을 기반으로 코드 생성을 할 수있는 프레임 워크가 있고 개발자가 미리 컴파일 할 수 있도록 빌드 시간 소스 코드 생성을 지원하고, 생성 된 내용을 확인하고, 심지어 수정할 수도 있습니다. 코드뿐만 아니라 런타임을 제공합니다 바이트 코드 더 많은 동적 응용 프로그램 (예 : 플러그인 기반 응용 프로그램)을 위해 두 가지 작업 모두에 ASM을 사용할 수 있습니까? 아니면 두 개의 다른 라이브러리로 두 번 프로그래밍해야합니까? 가능한 경우 예제에 대한 링크가 환영받을 것입니다.ASM과 동일한 "generator"를 사용하여 Java 바이트 코드와 소스 코드를 모두 생성 할 수 있습니까?
답변
이 질문에 직접 대답하지는 않지만 ASM보다 Javassist을 사용하는 것이 좋습니다.
Javassist를 사용하면 소스 코드를 생성하고 Javassist 컴파일러에서 바이트 코드로 바꾸기 만하면됩니다. 이제 여분의 트릭 없이도 사용할 수 있습니다. 또한 Javassist 용 소스 코드를 생성하는 IMHO는 바이트 코드와 ASM을 사용하는 것보다 훨씬 쉽습니다.
빌드 타임 코드 생성을 위해 공개 API가없는 eclipse java 컴파일러를 사용하는 것이 좋습니다. 실제로는 사용하기가 매우 쉽습니다. 여기에서 사용할 수있는 방법을 살펴볼 수 있습니다 : http://git.jetbrains.org/?p=mps/mps.git;a=tree;f=core/kernel/source/jetbrains/mps/compiler;h=6787147e3b36899574f042dd2132a4c08963670e;hb=HEAD (이 코드는 주로 저에게 씁니다). 컴파일 된 클래스를 동적으로로드하는 방법에 대한 예제도 있습니다 (MyClassLoader 내부 클래스).
이것이 나에게 유용 할 지 모르겠지만 오타에 +1을 주었다. "너는 * 여기에서 * 고칠 수있다"LOL! –
나는 귀하의 요점을 볼 수 있습니다. 오래 전 자바 어시스트를 보았습니다. 아무도 모른다면 아마 그 일이 내가 할 일일 것입니다. –
나는 그것을 다시 보았고 Javassist와 함께하는 방법을 모르겠습니다. 클래스 파일을 생성하는 데 사용하는 "소스 코드"에는 "$ cflow (...)"와 같은 내용이 포함될 것이므로 실제 Java 코드는 아닙니다. CtClass에 컴파일 된 클래스를 저장하는 방법 만 볼 수 있습니다. 이게 지원 되니? –
하루 후에 다른 답변이 없습니다. ASM에서는 불가능할 수 있으므로 포인트를 얻을 수 있습니다. –