2011-04-08 9 views
10

Witam Wszystkich Piszę niektóre oprogramowanie, które pozwoli użytkownikom tworzyć własne klasy Java do określonego zastosowania w moim pakiecie oprogramowania. Oczywiście moje oprogramowanie będzie musiało mieć możliwość wywołania kompilatora Java, aby skompilować klasy generowane przez użytkownika do wykorzystania w moim programie. Nie chcę jednak wymagać od użytkowników pobierania i instalowania całego JDK tylko po to, aby mieć dostęp do kompilatora Javy Java. Rozumiem, że w Jave 6 jest nowy API Java Compiler, ale nawet wtedy użytkownicy z JRE, a nie JDK otrzymają obiekt zerowy, gdy próbują utworzyć narzędzie kompilatora Java.Korzystanie z Java Compiler API bez konieczności instalowania JDK

Jaki jest najlepszy sposób, aby mój program mógł kompilować klasy Java, jednocześnie wymagając od użytkownika końcowego, aby zainstalował JRE na swoich komputerach? Jeśli nie jest to możliwe, jaki jest minimalny zestaw plików bibliotek/jar, które muszę zainstalować na komputerze użytkownika?

Przypuszczam, że inną możliwością może być użycie JWS (javaws) do uruchomienia aplikacji przez Internet. W takim przypadku czy moje oprogramowanie nie wymaga JDK (głównie tools.jar)? Czy w jakiś sposób musiałbym pakiet tools.jar z mojego oprogramowania?

Odpowiedz

5

Możesz użyć samodzielnego Java compiler from Eclipse. Nie wymaga instalacji JDK i jest to pojedynczy plik JAR, który można wykorzystać w projekcie. Jest to kompilator, który jest używany w samym Eclipse, ale można go również zintegrować z innymi programami. Możesz znaleźć najnowszą stabilną wersję pod numerem http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php, poszukaj opcji JDT Core Batch Compiler. Dokumentacja jest dostępna pod adresem http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm

Można również użyć Janino, która może kompilować także mniejsze jednostki niż pełne klasy Java: bloki, wyrażenia. Nie jest to jednak pełny kompilator, nie obsługuje wszystkich funkcji języka Java, z których korzystają twoi użytkownicy (generics, adnotacje, wyliczenia, ...)

+1

java -jar ecj-3.6.2.jar -d gaevfs.bin \ gaevfs.src \ com \ newatlanta \ commons \ vfs \ provider \ gae \ GaeFileObject.java -cp D: \ ProgXP \ jre6 \ lib \ rt .jar; D: \ WorkSpace \ diyism.com.war \ WEB-INF \ lib \ appengine-api-1.0-sdk-1.5.5.jar; D: \ WorkSpace \ diyism.com.war \ WEB-INF \ lib \ commons-vfs-2.0-SNAPSHOT.jar; D: \ WorkSpace \ diyism.com.war \ WEB-INF \ lib \ gaevfs-0.3.jar; D: \ WorkSpace \ diyism.com.war \ WEB-INF \ lib \ commons-logging-1.1.1.jar – diyism

0

Wygląda na to, że lepszym rozwiązaniem byłoby użycie języka skryptowego, który może działać w ramach JVM bez konieczności kompilacji.

Możliwe, że przyda ci się Java Scripting API. Jestem pewien, że są też inne opcje.

3

Aby użyć kompilatora Java, musisz dołączyć tools.jar do swojej aplikacji (np. musi być dostępny dla programu ładującego klasy, który chce załadować kompilator - najłatwiej za pomocą programu ładującego klasy System).

+2

"... musisz załączyć' tools.jar' do swojej aplikacji. "Rozmyślałem o tej możliwości podczas rozwijania [SSCCE Text Based Compiler] (http: // pscode .org/stbc /). Jak wspomniałem o pomocy (http://pscode.org/stbc/help.html#classpath) "... prawdopodobnie narusza licencję dystrybucyjną firmy Sun.". Zdaję sobie sprawę, że ludzie tutaj są "nie prawnikami", ale jeśli ktoś ma alternatywne teorie/interpretacje licencji, chciałbym je usłyszeć. –

+2

Zrób to z OpenJDK i dodaj link do źródła. –

+2

Nie pomyślałem o tym! Zręcznie podnosi "problem licencyjny". :) –