2010-04-12 4 views
6

Java 코드를 .java 파일로 생성하는 방법을 제공하는 자바 용 툴 (C# 용 코드)을 아는 사람이 있습니까?Java 코드 생성 (Metaprogramming, Reflection, wtv)

편집 : 나는 작업을 자동화하는 주된 목적 인 플래 타이폼을 제작하고 있습니다. 몇 가지 입력을주고, 나는 외부 도구에 대한 코드를 생성하고 싶습니다. 따라서 런타임에 생성되지 않습니다. 그 파일을 생성하여 실제 파일로 출력하고 싶습니다.

+1

프로그램의 종류에 대한 코드 생성의 어떤 종류의? 런타임시 코드 생성 여부 더 구체적으로 말하십시오. –

+0

여기 최종 목표는 무엇입니까? Java에는 바이트 코드 (컴파일 된 Java 코드)를 작성하거나 수정하는 데 필요한 많은 도구가 있지만 Java 코드를 직접 생성하는 방법에 대해서는 알지 못합니다. – ig0774

+0

나는 작업을 자동화하는 주된 목표 인 플래 타이폼을 만들고 있습니다. 몇 가지 입력을주고, 나는 외부 도구에 대한 코드를 생성하고 싶습니다. 따라서 런타임에 생성되지 않습니다. 그 파일을 생성하여 실제 파일로 출력하고 싶습니다. –

답변

0

바이트 코드 수준에서 기존 클래스를 수정하거나 완전히 새로운 클래스를 생성하는 데는 ASM을 사용하여 성공했습니다. tutorial은 매우 이해하기 쉬운 방식으로이 과정을 안내합니다.

ASM 같은 도구는 소스 코드가 아닌 바이트 코드를 생성합니다. 그 이유는 프로그램에서 새로운 코드를 동적으로 생성하고 실행하려는 경우 였기 때문에 역사적으로 Java 컴파일러를 호출하는 것이 쉽지 않았습니다. 따라서 소스 코드보다 바이트 코드를 생성하고 사용하는 것이 일반적으로 더 쉽습니다.

프로그램 내에서 즉시 코드를 생성하여 실행해야한다면 바이트 코드 조작 도구를 사용하는 것이 좋습니다. Java 소스가 모두 필요한 경우 입력 형식을 사용하고 코드를 생성하는 자체 코드 생성기를 롤백합니다. framework을 찾으려면 원본 파일이 텍스트 일 ​​뿐이므로 보통 사용자 지정 입력 형식 인 경우 특히 쉽게 만들 수 있습니다. 미안 나도 몰라 된 CodeDom 어떤 기능이 도구를 의미한다 :

+0

내가 런타임에 뭔가를 변경하고 싶다면 좋겠지 만 실제로 사용하기 위해 정적 코드를 생성합니다. –

+1

ASM은 바이트 코드 수정을위한 것이 아닙니다. 소스 코드가 필요 없다면 완벽 할 것입니다. 특히 위대한 Eclipse 바이트 코드 개요. – tcurdt

+0

감사하지만, Freemarker는 내가 원했던 것을 할 수있다. (: –

0

당신이 시도 할 수있는 것은 (예를 들어, ANTLR에서) 기존의 문법을 사용하고 AST를 구축하는 것입니다 볼 수 있습니다. 그런 다음 AST에서 코드를 생성합니다. 그것은 단순한 템플리트보다 훨씬 강력해야합니다. 가운데에있는 뭔가가 테렌스 파 (Terence Parr)의 StringTemplate에 대한 (눈을 뜨게하는) 대화를 제안합니다. (미안, 가까이에있는 토크에 대한 링크가 없습니다)

+0

감사하지만 Freemarker는 그 일을 할 수있다. 내가 원했던 (: –

0

정말 필요한 것이 확실하지 않지만 javassist을 살펴보십시오. 그것은 당신이 찾고있는 것입니까?

1

ABSE와 AtomWeaver는 원하는 것을 쉽게 구현할 수있는 코드 생성 및 모델 중심 개발 프레임 워크를 형성합니다. ABSE는 작은 비트 (Atoms라고 함)에서 코드 생성기를 작성하는 새로운 방법이며 AtomWaver는 생성기 모델을 구현, 조작 및 사용할 수있는 간단한 IDE입니다.

또한 프로그래머가 아닌 사용자도 이미 작성한 부분 (이전에 준비한 원자)으로 만든 프로그램/구성/무엇이든 만들 수 있습니다.

이 프로젝트는 이제 공개적으로 시작되었으며 알파 버전이 현재 제공됩니다. ABSE는 공개되어 있으며 AtomWeaver는 개인적 및 상업적 용도로 무료입니다.

여기에 더 많은 정보를 얻을 : http://www.abse.info (면책 조항 : 나는이 프로젝트 리드입니다)

+0

감사하지만, Freemarker는 내가 원하는 것을 할 수있다 (: –

관련 문제