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?
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. –
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. –
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. –