2010-08-21 2 views
6

현재 프로젝트에서 런타임시 Java 코드를 컴파일해야합니다 (백그라운드에서 사용자 입력을 처리해야 함). 이것은 classpath의 tools.jar와 잘 동작합니다. 그러나 내 프로그램의 모든 사용자가 시스템에 JDK를 설치하지는 않습니다. 그들 중 일부는 JRE 만 가지고 있으며이 경우 실행시에 사용할 수있는 Java 컴파일러가 없습니다. 내 도구의 일부로 Sun의 tools.jar 파일을 포함 시켜서이 문제를 해결할 수 있습니다.런타임시 Java 컴파일러

하지만 tools.jar은 매우 커 (> 12 MB). 문제는 큰 jar 파일을 포함해야한다는 것입니다. 비록이 jar가 제공하는 기능 중 일부분에만 관심이 있습니다. 나는 자바 코드 만 컴파일에 필요한 입니다 클래스 작은 부분 집합을 가질 수 있도록

  1. IT는 tools.jar를 파일을 깰 수 있습니까?

  2. 이것은 불법입니까?

고마워요.

답변

3

eclise 컴파일러는 1.6MB에 불과하며 일식없이 작동해야합니다. here을 다운로드 할 수 있습니다. 또한 JavaCompiler API를 구현하는 것처럼 보입니다.

일식 공개 라이센스에 따라 라이센스가 부여되어 있으므로 자신의 응용 프로그램에 아무런 문제가 없어야합니다.

+0

이것은 사용하는 것으로 생각되는 옵션입니다. 예, Eclipse없이 Eclipse 컴파일러를 사용할 수 있습니다. 스레드 캐싱 동작으로 인해 문제가 발생했습니다. 즉, 하나의 스레드에서 둘 이상의 컴파일러 인스턴스를 가져올 수 없습니다. 내 사용 시나리오에서는 매번 컴파일러의 새 인스턴스가 필요하기 때문에 컴파일러에서 진단 메시지를 추적하는 데 문제가 있습니다. – Dipmedeep

0

tools.jar을 해체하는 것이 가능하지 않다고 생각합니다. 또한 tools.jar를 포함하는 것이 합법적이어서는 안됩니다.

확인 http://forums.sun.com/thread.jspa?threadID=5161541

당신은 어떤 제 3 자 자바 컴파일러에 대한 모양과 같은 사용하도록 코드를 변경할 수 있습니다.

(이 사람은 Java5 자바 6 제한된 지원을 지원하지 않습니다)하지만 나는이를 사용하여 컴파일 정확한 코드를 모른다.

+1

GCJ는 쓸모가 없습니다. Jikes는 유망하지만 대부분의 Java 5 기능을 지원하지 않습니다. – TheLQ

0

BeanShell과 같은 자바 스크립팅을 원하십니까? 컴파일하지 않고 Java 코드를 실행하는 데 도움이됩니다.

1

런타임에 코드를 컴파일하는 대신 스크립팅 언어로 코드를 다시 작성하고 scripting framework을 사용합니다. JDK에 대한 필요성은 없으며 법적인 문제는 없습니다. 그런 다음 Beanshell, JavaScript 또는 jython과 같이 다양한 언어를 사용할 수 있습니다.

+0

저는 Rhino 임 플리 멘 테이션을 직접 사용해 봤는데 훌륭하게 작동합니다. 또한 Rhino에 들어간 적이없는 기능을 내장하고 전체 프로세스를 단순화하는 보너스가 있습니다. – TheLQ

+0

JRuby 누구? :) –

0

계산을 수행하는 메소드를 작성한 다음 해당 메소드를 사용하는 데 적합한 스니 j 컴파일러가 들어있는 Javassist 라이브러리를 살 l보십시오.

가장 적합한 것은 특히 실제 요구 사항, 특히 얼마나 자주 수행해야하는지에 따라 다릅니다.

1

아마 더 좋은 질문은 무엇입니까?

동적 계산을 수행해야하는 경우 JEval을 고려하십시오. 사람들이 간단한 플러그인을 작성해야하는 경우 Javascript 나 Python과 같은 동적 언어를 고려해보십시오.

기타 사항은 Java 작성에 필요한 JDK를 다운로드해야합니다. 컴파일러를 프로그램에 삽입하려는 이유를 찾기가 어려울 것입니다.

관련 문제