2012-03-26 2 views
2

내 Google foo에 문제가 있습니다. 어노테이션을 기반으로 코드 생성을 할 수있는 프레임 워크가 있고 개발자가 미리 컴파일 할 수 있도록 빌드 시간 소스 코드 생성을 지원하고, 생성 된 내용을 확인하고, 심지어 수정할 수도 있습니다. 코드뿐만 아니라 런타임을 제공합니다 바이트 코드 더 많은 동적 응용 프로그램 (예 : 플러그인 기반 응용 프로그램)을 위해 두 가지 작업 모두에 ASM을 사용할 수 있습니까? 아니면 두 개의 다른 라이브러리로 두 번 프로그래밍해야합니까? 가능한 경우 예제에 대한 링크가 환영받을 것입니다.ASM과 동일한 "generator"를 사용하여 Java 바이트 코드와 소스 코드를 모두 생성 할 수 있습니까?

답변

3

이 질문에 직접 대답하지는 않지만 ASM보다 Javassist을 사용하는 것이 좋습니다.

Javassist를 사용하면 소스 코드를 생성하고 Javassist 컴파일러에서 바이트 코드로 바꾸기 만하면됩니다. 이제 여분의 트릭 없이도 사용할 수 있습니다. 또한 Javassist 용 소스 코드를 생성하는 IMHO는 바이트 코드와 ASM을 사용하는 것보다 훨씬 쉽습니다.

+0

나는 귀하의 요점을 볼 수 있습니다. 오래 전 자바 어시스트를 보았습니다. 아무도 모른다면 아마 그 일이 내가 할 일일 것입니다. –

+0

나는 그것을 다시 보았고 Javassist와 함께하는 방법을 모르겠습니다. 클래스 파일을 생성하는 데 사용하는 "소스 코드"에는 "$ cflow (...)"와 같은 내용이 포함될 것이므로 실제 Java 코드는 아닙니다. CtClass에 컴파일 된 클래스를 저장하는 방법 만 볼 수 있습니다. 이게 지원 되니? –

+0

하루 후에 다른 답변이 없습니다. ASM에서는 불가능할 수 있으므로 포인트를 얻을 수 있습니다. –

1

빌드 타임 코드 생성을 위해 공개 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 내부 클래스).

+0

이것이 나에게 유용 할 지 모르겠지만 오타에 +1을 주었다. "너는 * 여기에서 * 고칠 수있다"LOL! –