2012-09-03 4 views
3

Venant d'un C++/faire fond, je suis habitué à faire quelque chose comme ça pour construire et gérer de petites/moyennes programmes:Quelle est la meilleure façon d'exécuter un programme Java petit/moyen à partir de la ligne de commande?

make 
./foobar 

Cependant, avec java/ant je trouve que je dois faire quelque chose comme ceci:

ant 
java -ea -cp build/ foobar 

taper java -ea -cp build/ foobar chaque fois que je veux tester mon programme est assez ennuyeux, je préférerais être en mesure de faire quelque chose de simple comme ./foobar.

J'ai trouvé deux solutions possibles à ce problème, mais aucune ne semble très bonne. La première est d'avoir juste la cible compile créer un fichier appelé run:

#!/bin/bash 

java -ea -cp build/ foobar 

Et puis il suffit d'utiliser ./run pour exécuter le programme, mais cela semble aller à l'encontre de la nature multi-plateforme de fourmi, et aussi tout semble comme un un peu d'un hack.

La deuxième option consiste à créer une cible run, par exemple:

<target name="run" depends="compile"> 
    <java classname="foobar" fork="true"> 
     <classpath> 
     <pathelement path="${build}"/> 
     <pathelement path="${java.class.path}"/> 
     </classpath> 
     <assertions> 
     <enable/> 
     </assertions> 
    </java> 
</target> 

Cette méthode fonctionne également, et semble un peu plus propre, mais il est incroyablement lent! Par exemple:

$ time ant run 
Buildfile: /somepath/build.xml 

init: 

compile: 

run: 
    [java] /* program output */ 

BUILD SUCCESSFUL 
Total time: 1 second 

real 0m2.683s 
user 0m2.548s 
sys  0m0.136s 

Ce qui précède est presque 20 fois plus lent que ce (!):

$ time ./run 
/* program output */ 

real 0m0.143s 
user 0m0.124s 
sys  0m0.020s 

Ainsi est-il un moyen de mieux/plus standard de l'exécution d'un programme java petit/moyen de la commande ligne? Ou devrais-je juste utiliser l'une des méthodes que j'ai posté ici?

+0

J'ai tendance à simplement écrire la commande à la main, et après cela, comptez sur l'historique de mon shell pour l'exécuter à nouveau. ' -r foob ' devrait m'y amener. N'aide pas les utilisateurs réels, je l'admets. –

+0

Si vous voulez exécuter un programme rapidement, je l'exécuterai à partir d'un IDE. Cela vous donne la possibilité de voir les erreurs du compilateur lorsque vous tapez et 'Run' ou' Debug' avec un clic sur un bouton. –

+0

Je ne suis pas un expert Ant, mais Gradle a un [plugin d'application] (http://gradle.org/docs/current/userguide/application_plugin.html) qui fournit une tâche 'run' qui exécute le programme, ainsi en tant que tâche 'installApp', qui crée des scripts de démarrage spécifiques à la plate-forme. Il pourrait bien y avoir un équivalent Ant. –

Répondre

3

Il me semble que vous voulez construire/exécuter pendant la phase de développement. Si c'est le cas, alors obtenez un Eclipse et utilisez-le pour déboguer/lancer, c'est le moyen le plus efficace de développer sous Java.

Habituellement:

  • Ant est utilisé pour la phase d'emballage

  • shell

    est utilisé pour le programme en cours d'exécution, et vous écrirait un par environnement (Linux/Windows/Mac OS)

+0

Il semble que ce soit probablement la bonne réponse. J'utilise principalement la ligne de commande pour apprendre le processus de compilation java, et je suppose qu'il n'y a pas de moyen plus propre d'exécuter un programme que ce que j'ai suggéré dans ma question. J'accepterai cette réponse s'il n'y en a pas d'autres dans les prochaines heures. –

+0

C'est un moyen courant de fournir différents scripts shell pour différents systèmes d'exploitation. Vous pouvez également faire en sorte que la génération de ces scripts shell fasse partie de votre fichier de construction ant. – coolcfan

+0

@GordonBailey quelques heures ont passé :-) –

Questions connexes