2008-10-15 5 views
112

Existe-t-il un moyen de compiler un projet Java basé sur Eclipse à partir de la ligne de commande? J'essaye d'automatiser ma construction (en utilisant FinalBuilder non ant), et je ne suis ni expert en Java ni en Eclipse. Je peux probablement comprendre comment faire cela avec les options de ligne de commande java directement, mais le projet Eclipse a l'impression de gaspiller beaucoup d'efforts.Création d'un projet Java Eclipse à partir de la ligne de commande

Dans le cas où il n'y a pas moyen de compiler un projet Eclipse via la ligne de commande, est-il un moyen de générer la ligne de commande java nécessaire à partir d'Eclipse? Ou y a-t-il des fichiers que je peux fouiller pour trouver les étapes de compilation qu'il fait derrière la scène?


Les gars, je suis à la recherche d'une réponse qui ne pas comprennent fourmi. Permettez-moi de réitérer la question originale ....... Y at-il un moyen de construire un projet Eclipse à partir de la ligne de commande?

Je ne pense pas que ce soit une question déraisonnable étant donné que je peux faire quelque chose comme ça pour le studio visuel:

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

Comment est-ce qu'il n'y a pas un plugin/pot pour cela !! – Kieveli

+1

Ok ... J'ai ajouté une nouvelle bonne réponse. – Kieveli

Répondre

55

Vous pouvez construire un projet d'éclipse par un espace de travail de la ligne de commande:

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

Il utilise le plugin jdt apt pour construire automatiquement votre espace de travail. Ceci est également connu comme une «construction sans tête». Merde difficile à comprendre. Si vous n'êtes pas en utilisant un exe win32, vous pouvez essayer ceci:

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

Mise à jour

Plusieurs années éclipser remplacé il y a startup.jar avec le "lanceur équinoxe"

https://wiki.eclipse.org/Equinox_Launcher

Sur 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 

Le paramètre -data spécifie l'emplacement de votre espace de travail.

Le numéro de version du lanceur d'équinoxe dépend de la version d'Eclipse que vous possédez.

+3

Même si j'ai depuis longtemps quitté ce projet et que je ne peux pas vérifier si cette réponse fonctionne réellement, je change la réponse acceptée à celle-ci. Parce qu'il indique qu'Eclipse possède bien un commutateur de ligne de commande. –

+3

Juste une pensée - semble que cela ne fonctionne que pour les espaces de travail préexistants. Je suppose que cela rend difficile, par exemple, de vérifier le projet à partir du contrôle de source et de le construire de cette façon. – John

+0

Je crois que mon espace de travail a été validé dans le dépôt svn. Il avait soit des chemins relatifs, soit des structures de répertoire correspondantes. – Kieveli

2

La apporoach normale fonctionne l'inverse: Vous créez votre build basé sur maven ou ant et ensuite utiliser des intégrations pour votre IDE de choix afin que vous soyez indépendant de celui-ci, ce qui est esp. important lorsque vous essayez de mettre à jour de nouveaux membres de l'équipe ou utilisez un serveur d'intégration contious pour les générations automatisées. Je recommande d'utiliser maven et laissez-le faire le levage lourd pour vous. Créez un fichier pom et générez le projet eclipse via mvn eclipse: eclipse. HTH

+4

Il est souvent beaucoup plus agréable d'émuler le flux de travail actuel au lieu de dire à chaque développeur de modifier son comportement. Surtout quand Eclipse est beaucoup plus rapide que la fourmi. –

2

This question contient des liens utiles sur les builds sans tête, mais ils sont principalement orientés vers la construction de plugins. Je ne suis pas sûr de ce qui peut être appliqué aux projets Java purs.

-5

Ce que fait généralement Eclipse est BUILD seulement les fichiers java. Étant donné que vous devriez pouvoir regarder le classpath du fichier .classpath et les sources requises du fichier .project et faire un javac dessus. Cela devrait être assez facile.

+13

Si c'était facile, alors il aurait dû être inclus dans votre réponse! – Kieveli

21

Pour terminer la réponse d'André, une solution de fourmi pourrait être comme celle décrite dans Emacs, JDEE, Ant, and the Eclipse Java Compiler, comme dans:

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

L'élément compilerarg vous permet également de passer dans args de ligne de commande supplémentaires au compilateur Eclipse.

Vous pouvez trouver un full ant script example here qui serait invoqué dans une ligne de commande avec:

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 

mais tout ce qui concerne la fourmi, qui n'est pas ce que Keith est après.

Pour une compilation par lots, s'il vous plaît se référer à Compiling Java code, en particulier la section "Utilisation du compilateur batch"

La classe du compilateur de lot est situé dans le plug-in JDT de base. Le nom de la classe est org.eclipse.jdt.compiler.batch.BatchCompiler. Il est empaqueté dans plugins/org.eclipse.jdt.core_3.4.0..jar. Depuis 3.2, il est également disponible en téléchargement séparé. Le nom du fichier est ecj.jar.
Depuis la version 3.3, ce fichier contient également le support de jsr199 (API du compilateur) et le support de jsr269 (traitement des annotations). Pour utiliser le support de traitement des annotations, une machine virtuelle 1.6 est requise.

Exécution du compilateur de commandes à partir de la ligne de commande donnerait

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

ou:

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

Toutes les options de compilation java sont détaillées dans cette section.

La différence avec la fonction de compilation de ligne de commande Visual Studio est que Eclipse ne semble pas lire directement son .project et .classpath dans un argument de ligne de commande. Vous devez signaler toutes les informations contenues dans .project et .classpath dans les différentes options de ligne de commande afin d'obtenir le même résultat de compilation. Donc, alors, une réponse courte est: "oui, Eclipse fait un peu." ;)

+2

Il est possible de compiler un espace de travail avec le projet Eclipse en utilisant le projet ant4eclipse, mais il a besoin de beaucoup de graisse de coude car vous devez effectuer toutes les étapes nécessaires manuellement en fonction des méta-informations que vous extrayez. Je l'ai fait pour nos projets internes, mais je ne le recommanderais pas à moins que vous en ayez vraiment besoin! Nous avons fait :-D –

+0

@ Thorbjørn Ravn Andersen: merci pour ces commentaires.Vous pouvez également poster une réponse dans ce fil illustrant le type de "coude graisse" impliqué ici;) – VonC

+0

bien, ce que j'ai piraté ensemble sur la base de ant4eclipse - qui nécessite un fichier projectSet.psf - pour émuler la fonctionnalité "export runnable jar" isn pas joli donc pas de réponse. En outre, il ne fonctionne pas Eclipse, mais émule Eclipse en utilisant ant: D –

-3

Réponse courte. N ° Eclipse n'a pas de commutateur de ligne de commande comme Visual Studio pour créer un projet.

+3

Réponse courte: oui. Eclipse fait un peu. Sauf que vous devez signaler toutes les informations contenues dans le fichier .project et .classpath dans les différentes options de ligne de commande – VonC

+0

Des solutions de construction externes (vers Eclipse) comme ant ou maven sont généralement utilisées pour cela, comme indiqué dans les autres réponses. –

0

Hi Juste un ajout aux commentaires de VonC. J'utilise le compilateur ecj pour compiler mon projet. il était expéditeur que certaines des classes ne sont pas trouvées. Mais le projet était bien construit avec le compilateur javac.

Alors que j'ai ajouté les classes dans le classpath (que nous devons passer comme argument) et maintenant son travail bien ... :)

Kulbir Singh

5

Après 27 ans, moi aussi, je suis mal à l'aise de développer dans un IDE.J'ai essayé ces suggestions (ci-dessus) - et probablement n'ai tout simplement pas suivi tout droit - alors j'ai fait une recherche sur le web et j'ai trouvé ce qui fonctionnait pour moi à 'http://incise.org/android-development-on-the-command-line.html'.

La réponse semblait être une combinaison de toutes les réponses ci-dessus (s'il vous plaît dites-moi si je me trompe et accepter mes excuses si c'est le cas).

Comme mentionné ci-dessus, eclipse/adt ne crée pas les fichiers ant nécessaires. Pour compiler sans Eclipse IDE (et sans créer des scripts de fourmis):

1) Générer build.xml dans votre répertoire de niveau supérieur:

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) Ensuite, je compilez le projet. J'étais un peu confus par la demande de ne pas utiliser «fourmi». Espérons que - demandeur voulait dire qu'il ne voulait pas écrire des scripts ant. Je dis cela parce que l'étape suivante consiste à compiler l'application à l'aide de fourmis

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) Pour installer le apk sur l'appareil que je devais utiliser fourmi à nouveau:

ant target install 

    ** my command line looked like ant debug install 

4) Pour exécuter la projet sur mon téléphone Android j'utilise 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) Une remarque: Pour afficher l'historique de l'utilisation de l'appareil:

adb logcat 

3B) Une deuxième remarque: Le lien mentionné ci-dessus comprend également des instructions pour la construction de l'ensemble du projet de la commande .

J'espère que cela aidera à la question. Je sais que j'étais vraiment heureux de trouver quoi que ce soit sur ce sujet ici.

+1

si le projet est déjà construit (en mode debug f.ex.) vous pouvez utiliser 'ant installd' pour installer sans construire –

1

Je voulais juste ajouter mes deux cents à cela. J'ai essayé de faire comme suggéré pour @Kieveli non win32 (repris ci-dessous), mais cela n'a pas fonctionné pour moi (sur CentOS avec Eclipse: Luna):

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

Sur ma configuration particulière sur CentOS en utilisant Eclipse (Luna) cette a travaillé:

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

La sortie devrait ressembler à ceci:

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 

Pas tout à fait sûr pourquoi il semble l'avoir fait deux fois, mais il semble fonctionner.

Questions connexes