Crea il progetto Java Eclipse dalla riga di comando


118

C'è un modo per compilare un progetto Java basato su Eclipse dalla riga di comando?

Sto cercando di automatizzare la mia build (usando FinalBuilder non ant) ​​e non sono né un esperto di Java né di Eclipse. Probabilmente posso capire come farlo con le opzioni della riga di comando java dirette, ma poi il progetto Eclipse sembra un sacco di sforzi inutili.

Nel caso in cui non sia possibile compilare un progetto Eclipse tramite la riga di comando, esiste un modo per generare la riga di comando java richiesta da Eclipse? O ci sono alcuni file che posso curiosare per trovare i passaggi di compilazione che sta facendo dietro le quinte?


Ragazzi, sto cercando una risposta che NON includa la formica. Permettetemi di ripetere la domanda originale ....... C'è un modo per creare un progetto Eclipse dalla riga di comando?

Non penso che questa sia una domanda irragionevole dato che posso fare qualcosa di simile per Visual Studio:

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"

3
Come mai non esiste un plugin / jar per questo !!
Kieveli

1
Ok ... ho aggiunto una nuova risposta corretta.
Kieveli

Risposte:


61

Puoi creare un progetto Eclipse tramite un'area di lavoro dalla riga di comando:

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

Usa il jdt aptplugin per costruire automaticamente il tuo spazio di lavoro. Questo è anche noto come "build senza testa". Dannatamente difficile da capire. Se non stai usando un exe win32, puoi provare questo:

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

Aggiornare

Diversi anni fa l'eclissi è stata sostituita startup.jarcon il "lanciatore equinozio"

https://wiki.eclipse.org/Equinox_Launcher

Su 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

Il -dataparametro specifica la posizione del tuo spazio di lavoro.

Il numero di versione per il launcher equinox dipenderà dalla versione di eclipse che hai.


4
Anche se sono passato da tempo da questo progetto e non posso verificare se questa risposta funziona effettivamente o meno, sto cambiando la risposta accettata a questa. Perché indica che Eclipse ha effettivamente un'opzione della riga di comando.
Keith G,

3
Un solo pensiero: sembra che funzioni solo per aree di lavoro preesistenti. Immagino che questo renda difficile, ad esempio, estrarre il progetto dal controllo del codice sorgente e crearlo in questo modo.
John

Credo che il mio spazio di lavoro sia stato assegnato al repository svn. Aveva percorsi relativi o strutture di directory corrispondenti.
Kieveli

2
Come vedi i risultati della costruzione? Ho provato questo e ho ottenuto l'output: "Building workspace", ma non ho ricevuto indicazioni sul fatto che la compilazione sia riuscita o meno.
Dikla

Puoi anche costruire il tuo spazio di lavoro tramite uno script ant da riga di comando. Vedi help.eclipse.org/indigo/…
riprogrammatore

22

Per completare la risposta di André, una soluzione di formica potrebbe essere come quella descritta in Emacs, JDEE, Ant e nel compilatore Java Eclipse , come in:

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

L'elemento compilerarg consente anche di passare argomenti aggiuntivi della riga di comando al compilatore eclipse.

Puoi trovare un esempio di script completo qui che verrebbe richiamato in una riga di comando con:

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

MA tutto ciò riguarda Ant, che non è ciò che Keith cerca.

Per una compilazione batch, fare riferimento a Compilazione del codice Java , in particolare la sezione " Utilizzo del compilatore batch "

La classe del compilatore batch si trova nel plug-in JDT Core. Il nome della classe è org.eclipse.jdt.compiler.batch.BatchCompiler. È contenuto in plugins / org.eclipse.jdt.core_3.4.0..jar. A partire dalla versione 3.2, è disponibile anche come download separato. Il nome del file è ecj.jar.
A partire dalla versione 3.3, questo jar contiene anche il supporto per jsr199 (API del compilatore) e il supporto per jsr269 (elaborazione delle annotazioni). Per utilizzare il supporto per l'elaborazione delle annotazioni, è necessaria una VM 1.6.

L'esecuzione del compilatore batch dalla riga di comando darebbe

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

o:

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

Anche tutte le opzioni di compilazione Java sono descritte in dettaglio in quella sezione.

La differenza con la funzionalità di compilazione della riga di comando di Visual Studio è che Eclipse non sembra leggere direttamente i suoi .project e .classpath in un argomento della riga di comando . È necessario riportare tutte le informazioni contenute in .project e .classpath in varie opzioni della riga di comando per ottenere lo stesso risultato di compilazione.

Quindi, la risposta breve è: "sì, Eclipse lo fa". ;)


2
È possibile compilare un'area di lavoro con il progetto Eclipse utilizzando il progetto ant4eclipse, ma ha bisogno di molto olio di gomito in quanto è necessario eseguire manualmente tutti i passaggi necessari in base alle meta informazioni estratte. L'ho fatto per i nostri progetti interni, ma non lo consiglierei a meno che non sia DAVVERO necessario! Lo abbiamo fatto :-D
Thorbjørn Ravn Andersen

@ Thorbjørn Ravn Andersen: grazie per questo feedback. Potresti anche pubblicare una risposta in questo thread che illustri il tipo di "olio di gomito" coinvolto qui;)
VonC

beh, quello che ho hackerato insieme sulla base di ant4eclipse - che richiede un file projectSet.psf - per emulare la funzionalità "export runnable jar" non è abbastanza, quindi nessuna risposta. Inoltre, non esegue Eclipse, ma emula Eclipse usando ant: D
Thorbjørn Ravn Andersen

Mi sono imbattuto in questa vecchia risposta: abbiamo scoperto che "emula la build di Eclipse utilizzando i file di configurazione di Eclipse" è troppo fragile nel lungo periodo e consiglio vivamente ad altri di non andare in quel modo. Usa invece i progetti Maven.
Thorbjørn Ravn Andersen

1
@ JeffPuckettII Grazie. Ho ripristinato il collegamento.
VonC

8

Dopo 27 anni, anch'io mi sento a disagio nello sviluppo in un IDE. Ho provato questi suggerimenti (sopra) - e probabilmente non ho seguito tutto bene - quindi ho fatto una ricerca sul web e ho trovato ciò che ha funzionato per me su ' http://incise.org/android-development-on-the- command-line.html '.

La risposta sembrava essere una combinazione di tutte le risposte sopra (per favore dimmi se sbaglio e accetta le mie scuse se è così).

Come accennato in precedenza, eclipse / adt non crea i file ant necessari. Per compilare senza eclipse IDE (e senza creare script ant):

1) Genera build.xml nella directory di primo livello:

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) Successivamente compilo il progetto. Ero un po 'confuso dalla richiesta di non usare "formica". Si spera: requester significava che non voleva scrivere alcun copione per formiche. Dico questo perché il passo successivo è compilare l'applicazione usando 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) Per installare l'apk sul dispositivo ho dovuto usare nuovamente ant:

 ant target install

    ** my command line looked like  ant debug install

4) Per eseguire il progetto sul mio telefono Android utilizzo 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) Una nota a margine: per visualizzare il registro dall'uso del dispositivo:

 adb logcat

3B) Una seconda nota a margine: il collegamento sopra menzionato include anche le istruzioni per costruire l'intero progetto dal comando.

Si spera che questo aiuti con la domanda. So di essere stato davvero felice di trovare qualcosa su questo argomento qui.


1
se il progetto è già costruito (in modalità debug per es.) puoi usare ant installdper installare senza
compilare

4

Il normale apporoach funziona al contrario: crei la tua build basata su Maven o Ant e quindi utilizzi le integrazioni per il tuo IDE preferito in modo da essere indipendente da esso, che è esp. importante quando si tenta di portare nuovi membri del team al passo con i tempi o utilizzare un server di integrazione continuo per build automatizzate. Consiglio di usare Maven e lascia che faccia il lavoro pesante per te. Crea un file pom e genera il progetto eclipse tramite mvn eclipse: eclipse. HTH


4
Spesso è molto più bello emulare il flusso di lavoro corrente invece di dire a ogni sviluppatore di modificare il proprio comportamento. Soprattutto quando Eclipse è molto più veloce di formica.
Thorbjørn Ravn Andersen

2

Questa domanda contiene alcuni collegamenti utili su build headless, ma sono principalmente orientati alla creazione di plug-in. Non sono sicuro di quanto possa essere applicato a progetti Java puri.


1

Volevo solo aggiungere i miei due centesimi a questo. Ho provato a fare come @Kieveli suggerito per non win32 (ripetuto sotto) ma non ha funzionato per me (su CentOS con Eclipse: Luna):

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

Nella mia particolare configurazione su CentOS utilizzando Eclipse (Luna) ha funzionato:

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

L'output dovrebbe essere simile a questo:

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

Non sono abbastanza sicuro del motivo per cui apparentemente lo ha fatto due volte, ma sembra funzionare.


0

Ciao Solo aggiunta ai commenti di VonC. Sto usando il compilatore ECJ per compilare il mio progetto. è stato giustificato il fatto che alcune delle classi non sono state trovate. Ma il progetto stava andando bene con il compilatore javac.

Quindi ho appena aggiunto le classi nel classpath (che dobbiamo passare come argomento) e ora funziona bene ... :)

Kulbir Singh


-3

Risposta breve. No. Eclipse non dispone di un'opzione della riga di comando come Visual Studio per creare un progetto.


5
Risposta breve: sì. Il tipo di Eclipse lo fa. Tranne che devi riportare tutte le informazioni contenute in .project e .classpath in varie opzioni della riga di comando
VonC

Le soluzioni di build esterne (a Eclipse) come ant o maven vengono in genere utilizzate per questo, come notato in altre risposte.
JR Lawhorne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.