Zbuduj projekt Eclipse Java z wiersza poleceń

118

Czy istnieje sposób na skompilowanie projektu Java opartego na Eclipse z poziomu wiersza poleceń?

Próbuję zautomatyzować moją kompilację (używając FinalBuildera, a nie ant), ale nie jestem ekspertem od Javy ani Eclipse. Prawdopodobnie mogę dowiedzieć się, jak to zrobić za pomocą prostych opcji wiersza poleceń Java, ale projekt Eclipse wydaje się być marnowanym wysiłkiem.

W przypadku, gdy nie ma możliwości skompilowania projektu Eclipse za pomocą wiersza poleceń, czy istnieje sposób na wygenerowanie wymaganego wiersza poleceń Java z poziomu Eclipse? A może są jakieś pliki, które mogę przeglądać, aby znaleźć kroki kompilacji, które wykonuje za kulisami?


Chłopaki, szukam odpowiedzi, która NIE zawiera mrówki. Powtórzę pierwotne pytanie… Czy istnieje sposób na zbudowanie projektu Eclipse z wiersza poleceń?

Nie wydaje mi się, żeby było to nierozsądne pytanie, biorąc pod uwagę, że mogę zrobić coś takiego dla studia wizualnego:

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"
Keith G.
źródło
3
Jak nie ma do tego wtyczki / jar !!
Kieveli
1
Ok ... dodałem nową poprawną odpowiedź.
Kieveli

Odpowiedzi:

61

Możesz zbudować projekt zaćmienia za pomocą obszaru roboczego z wiersza poleceń:

eclipsec.exe -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Używa jdt aptwtyczki do automatycznego tworzenia obszaru roboczego. Jest to również znane jako „budowanie bez głowy”. Cholernie trudne do rozgryzienia. Jeśli nie używasz win32 exe, możesz spróbować tego:

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Aktualizacja

Kilka lat temu zaćmienie zastąpiono startup.jar„wyrzutnią równonocy”

https://wiki.eclipse.org/Equinox_Launcher

Na Eclipse Mars (MacOX):

java -jar /Applications/Eclipse.app/Contents/Eclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar -noSplash -data "workspace" -application org.eclipse.jdt.apt.core.aptBuild

-dataParametr określa położenie obszaru roboczego.

Numer wersji programu uruchamiającego Equinox będzie zależeć od posiadanej wersji Eclipse.

Kieveli
źródło
4
Chociaż już dawno odszedłem od tego projektu i nie mogę zweryfikować, czy ta odpowiedź faktycznie działa, zmieniam zaakceptowaną odpowiedź na tę. Ponieważ wskazuje, że Eclipse rzeczywiście ma przełącznik wiersza poleceń.
Keith G,
3
Tylko jedna myśl - wygląda na to, że działa to tylko w przypadku wcześniej istniejących obszarów roboczych. Wydaje mi się, że to utrudnia na przykład pobranie projektu z kontroli źródła i zbudowanie go w ten sposób.
John
Uważam, że mój obszar roboczy został przypisany do repozytorium svn. Miał ścieżki względne lub pasujące struktury katalogów.
Kieveli
2
Jak widzisz wyniki kompilacji? Próbowałem tego i otrzymałem wynik: „Tworzenie obszaru roboczego”, ale nie dostałem wskazówki, czy kompilacja się powiodła, czy nie.
Dikla
Możesz także zbudować swój obszar roboczy za pomocą skryptu Ant wiersza poleceń. Zobacz help.eclipse.org/indigo/…
reprogrammer
22

Aby uzupełnić odpowiedź André, rozwiązanie Ant może być takie, jak opisane w Emacs, JDEE, Ant i Eclipse Java Compiler , na przykład:

      <javac
          srcdir="${src}"
          destdir="${build.dir}/classes"> 
        <compilerarg 
           compiler="org.eclipse.jdt.core.JDTCompilerAdapter" 
           line="-warn:+unused -Xemacs"/>
        <classpath refid="compile.classpath" />
      </javac>

Element compilerarg umożliwia również przekazywanie dodatkowych argumentów wiersza poleceń do kompilatora eclipse.

Możesz znaleźć pełny przykład skryptu Ant, który zostałby wywołany w wierszu poleceń za pomocą:

java -cp C:/eclipse-SDK-3.4-win32/eclipse/plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar org.eclipse.core.launcher.Main -data "C:\Documents and Settings\Administrator\workspace" -application org.eclipse.ant.core.antRunner -buildfile build.xml -verbose

ALE wszystko to dotyczy mrówek, a nie o to Keith.

Aby zapoznać się z kompilacją wsadową, zapoznaj się z sekcją Kompilowanie kodu Java , a zwłaszcza sekcją „ Korzystanie z kompilatora wsadowego

Klasa kompilatora wsadowego znajduje się we wtyczce JDT Core. Nazwa klasy to org.eclipse.jdt.compiler.batch.BatchCompiler. Jest spakowany w plugins / org.eclipse.jdt.core_3.4.0..jar. Od wersji 3.2 jest również dostępny jako osobny plik do pobrania. Nazwa pliku to ecj.jar.
Od wersji 3.3, ten jar zawiera również obsługę jsr199 (API kompilatora) i obsługę jsr269 (przetwarzanie adnotacji). Aby korzystać z obsługi przetwarzania adnotacji, wymagana jest maszyna wirtualna 1,6.

Uruchomienie kompilatora wsadowego Z wiersza poleceń dałoby

java -jar org.eclipse.jdt.core_3.4.0<qualifier>.jar -classpath rt.jar A.java

lub:

java -jar ecj.jar -classpath rt.jar A.java

Wszystkie opcje kompilacji Java są również szczegółowo opisane w tej sekcji.

Różnica w stosunku do funkcji kompilacji wiersza polecenia programu Visual Studio polega na tym, że Eclipse nie wydaje się bezpośrednio czytać swoich .project i .classpath w argumencie wiersza polecenia . Musisz zgłosić wszystkie informacje zawarte w .project i .classpath w różnych opcjach wiersza poleceń, aby uzyskać ten sam wynik kompilacji.

Zatem krótka odpowiedź brzmi: „tak, coś w rodzaju Eclipse”. ;)

VonC
źródło
2
Możliwe jest skompilowanie obszaru roboczego z projektem Eclipse przy użyciu projektu Ant4eclipse, ale wymaga to dużej ilości smaru, ponieważ wszystkie niezbędne kroki należy wykonać ręcznie w oparciu o wyodrębnione metainformacje. Zrobiłem to dla naszych wewnętrznych projektów, ale nie polecałbym tego, chyba że NAPRAWDĘ tego potrzebujesz! Zrobiliśmy :-D
Thorbjørn Ravn Andersen
@ Thorbjørn Ravn Andersen: dziękuję za tę opinię. Możesz również zamieścić odpowiedź w tym wątku, ilustrującą rodzaj "smaru łokciowego" występującego tutaj;)
VonC,
cóż, to, co zhakowałem w oparciu o ant4eclipse - co wymaga pliku projectSet.psf - aby emulować funkcjonalność „eksportu do uruchamiania plików jar” nie jest całkiem dobre, stąd brak odpowiedzi. Poza tym nie działa Eclipse, ale emuluje Eclipse za pomocą ant: D
Thorbjørn Ravn Andersen
Natrafiłem na tę starą odpowiedź: Odkryliśmy, że „emulacja kompilacji Eclipse przy użyciu plików konfiguracyjnych Eclipse” jest na dłuższą metę zbyt krucha i zdecydowanie odradzam innym, aby tak postępowali. Zamiast tego użyj projektów Maven.
Thorbjørn Ravn Andersen
1
@JeffPuckettII Dziękuję. Przywróciłem link.
VonC
8

Po 27 latach ja również czuję się nieswojo rozwijając się w IDE. Wypróbowałem te sugestie (powyżej) - i prawdopodobnie po prostu nie zastosowałem się do wszystkiego poprawnie - więc przeszukałem sieć i znalazłem to, co działa dla mnie na stronie „ http://incise.org/android-development-on-the- command-line.html ”.

Odpowiedź wydawała się być połączeniem wszystkich powyższych odpowiedzi (proszę, powiedz mi, czy się mylę, i przyjmij moje przeprosiny, jeśli tak).

Jak wspomniano powyżej, eclipse / adt nie tworzy niezbędnych plików ANT. Aby skompilować bez eclipse IDE (i bez tworzenia skryptów Ant):

1) Wygeneruj plik build.xml w katalogu najwyższego poziomu:

android list targets  (to get target id used below)

android update project --target target_id --name project_name  --path top_level_directory

   ** my sample project had a target_id of 1 and a project name of 't1', and 
   I am building from the top level directory of project
   my command line looks like android update project --target 1 --name t1 --path `pwd`

2) Następnie kompiluję projekt. Byłem trochę zdezorientowany prośbą, aby nie używać słowa „mrówka”. Miejmy nadzieję - zgłaszający miał na myśli, że nie chce pisać żadnych scenariuszy mrówek. Mówię to, ponieważ następnym krokiem jest skompilowanie aplikacji przy użyciu ant

 ant target

    this confused me a little bit, because i thought they were talking about the
    android device, but they're not.  It's the mode  (debug/release)
    my command line looks like  ant debug

3) Aby zainstalować apk na urządzeniu, musiałem ponownie użyć ant:

 ant target install

    ** my command line looked like  ant debug install

4) Aby uruchomić projekt na moim telefonie z Androidem, używam adb.

 adb shell 'am start -n your.project.name/.activity'

    ** Again there was some confusion as to what exactly I had to use for project 
    My command line looked like adb shell 'am start -n com.example.t1/.MainActivity'
    I also found that if you type 'adb shell' you get put to a cli shell interface
    where you can do just about anything from there.

3A) Uwaga dodatkowa: Aby wyświetlić dziennik z urządzenia, użyj:

 adb logcat

3B) Druga uwaga dodatkowa: Link wspomniany powyżej zawiera również instrukcje dotyczące budowy całego projektu z polecenia.

Miejmy nadzieję, że to pomoże w rozwiązaniu tego pytania. Wiem, że bardzo się ucieszyłem, mogąc znaleźć tutaj cokolwiek na ten temat.

Charles Thomas
źródło
1
jeśli projekt jest już zbudowany (w trybie debugowania, np.), możesz go użyć ant installddo instalacji bez
kompilowania
4

Normalne apporoach działa na odwrót: tworzysz swoją kompilację w oparciu o maven lub ant, a następnie używasz integracji dla wybranego IDE, dzięki czemu jesteś od niego niezależny, czyli np. ważne, gdy próbujesz przyspieszyć działanie nowych członków zespołu lub używać nieprzetworzonego serwera integracyjnego do automatycznych kompilacji. Polecam użycie mavena i niech zrobi to za Ciebie. Utwórz plik pom i wygeneruj projekt eclipse za pomocą mvn eclipse: eclipse. HTH

André
źródło
4
Często o wiele przyjemniej jest naśladować obecny przepływ pracy, zamiast mówić każdemu programistowi, aby zmienił swoje zachowanie. Zwłaszcza, gdy Eclipse jest znacznie szybsze niż mrówka.
Thorbjørn Ravn Andersen
2

To pytanie zawiera przydatne linki do kompilacji bez głowy, ale są one głównie ukierunkowane na tworzenie wtyczek. Nie jestem pewien, ile z tego można zastosować do projektów w czystej Javie.

JesperE
źródło
1

Chciałem tylko dodać do tego moje dwa centy. Próbowałem zrobić tak, jak zasugerował @Kieveli dla non win32 (powtórzone poniżej), ale to nie zadziałało (na CentOS z Eclipse: Luna):

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Na mojej konkretnej konfiguracji na CentOS przy użyciu Eclipse (Luna) zadziałało:

$ECLIPSE_HOME/eclipse -nosplash -application org.eclipse.jdt.apt.core.aptBuild  startup.jar -data ~/workspace

Wynik powinien wyglądać mniej więcej tak:

Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Cleaning output folder for test
Build done
Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Preparing to build test
Cleaning output folder for test
Copying resources to the output folder
Analyzing sources
Compiling test/src/com/company/test/tool
Build done

Nie do końca jestem pewien, dlaczego najwyraźniej zrobił to dwa razy, ale wydaje się, że działa.

jkwinn26
źródło
0

Cześć Tylko dodatek do komentarzy VonC. Do kompilowania projektu używam kompilatora ecj. rzucało się w oczy, że niektórych klas nie znaleziono. Ale projekt był dobrze zbudowany z kompilatorem javac.

Więc po prostu dodałem klasy do ścieżki klas (którą musimy przekazać jako argument) i teraz działa dobrze ... :)

Kulbir Singh


źródło
-3

Krótka odpowiedź. Nie. Eclipse nie ma przełącznika wiersza poleceń, takiego jak Visual Studio, do tworzenia projektu.

pdeva
źródło
5
Krótka odpowiedź: tak. Tak jakby Eclipse. Poza tym, że musisz zgłosić wszystkie informacje zawarte w .project i .classpath w różnych opcjach wiersza poleceń
VonC
Jak zauważono w innych odpowiedziach, zazwyczaj używa się do tego zewnętrznych (do Eclipse) rozwiązań do kompilacji, takich jak ant lub maven.
JR Lawhorne