Le cas d’utilisation est simple. J’ai obtenu les fichiers source créés avec Eclipse. Il existe donc une structure de répertoires approfondie, dans laquelle toute classe Java peut faire référence à une autre classe Java du même dossier enfant, parent ou parent.
Comment comstackr tout cela depuis le terminal en utilisant javac?
Vous devez connaître tous les répertoires ou pouvoir utiliser des caractères génériques.
javac dir1/*.java dir2/*.java dir3/dir4/*.java dir3/dir5/*.java dir6/*src/*.java
Avec Bash 4, vous pouvez simplement activer globstar
shopt -s globstar
et ensuite faire
javac **/*.java
Si tout ce que vous voulez faire, c’est d’exécuter votre classe principale (sans comstackr les fichiers .java
dont la classe principale ne dépend pas), vous pouvez procéder comme suit:
cd javac
ou
javac -cp
javac
résoudrait automatiquement toutes les dépendances et comstackrait également toutes les dépendances.
Je prendrais la suggestion de Jon et utiliser Ant, car c’est une tâche assez complexe.
Cependant, si vous êtes déterminé à tout obtenir sur une seule ligne du Terminal, sous Linux, vous pouvez utiliser la commande find . Mais je ne le recommande pas du tout, car il n’y a aucune garantie que, par exemple, Foo.java soit compilé après Bar.java, même si Foo
utilise Bar
. Un exemple serait:
find . -type f -name "*.java" -exec javac {} \;
Si toutes vos classes n’ont pas encore été compilées, s’il existe une classe principale de pilotes ou de harnais (celle contenant votre méthode principale), la compilation de cette classe principale devrait comstackr la plupart des projets, même s’ils se trouvent dans des dossiers différents. Javac essayera au mieux de ses capacités de résoudre les problèmes de dépendance.
Voici la méthode que j’ai trouvée:
1) Faites une liste de fichiers avec des chemins relatifs dans un fichier (par exemple, FilesList.txt) comme suit (séparez les espaces ou séparez les lignes):
foo/AccessTestInterface.java foo/goo/AccessTestInterfaceImpl.java
2) Utilisez la commande:
javac @FilesList.txt -d classes
Cela comstackra tous les fichiers et placera les fichiers de classe dans le répertoire des classes.
Le moyen le plus simple de créer FilesList.txt est le suivant: Accédez à votre répertoire racine source.
dir *.java /s /b > FilesList.txt
Mais, cela remplira le chemin absolu. En utilisant un éditeur de texte “Remplacer tout” le chemin d’access au répertoire source (inclure \ à la fin) avec “” (c’est-à-dire une chaîne vide) et Enregistrer.
Vous devez utiliser quelque chose comme Ant pour faire cela hiérarchiquement:
http://ant.apache.org/manual/Tasks/javac.html
Vous devrez créer un script de génération avec une cible appelée comstack contenant les éléments suivants:
Ensuite, vous pourrez comstackr tous les fichiers en exécutant:
ant comstack
Sinon, importez votre projet dans Eclipse et il comstackra automatiquement tous les fichiers sources de ce projet.
Les réponses déjà existantes ne semblent concerner que les fichiers * .java eux-mêmes et non la manière de les utiliser facilement avec les fichiers de bibliothèque nécessaires à la génération.
Une belle situation sur une ligne qui récupère de manière récursive tous les fichiers * .java ainsi que les fichiers * .jar nécessaires à la construction est:
javac -cp ".:lib/*" -d bin $(find ./src/* | grep .java)
Ici, le fichier bin est la destination des fichiers de classe, lib (et potentiellement le répertoire de travail actuel) contient les fichiers de la bibliothèque et tous les fichiers java du répertoire src et dessous sont compilés.
Il existe un moyen de le faire sans utiliser de caractère de canal, ce qui est pratique si vous faites un processus à partir d’un autre langage de programmation:
find $JAVA_SRC_DIR -name '*.java' -exec javac -d $OUTPUT_DIR {} +
Bien que si vous êtes à Bash et / ou que cela ne vous dérange pas d’utiliser un tuyau, alors vous pouvez faire:
find $JAVA_SRC_DIR -name '*.java' | xargs javac -d $OUTPUT_DIR
Solution Windows: en supposant que tous les fichiers contenus dans le sous-répertoire ‘src’, et que vous souhaitez les comstackr dans ‘bin’.
for /r src %i in (*.java) do javac %i -sourcepath src -d bin
Si src contient un fichier .java immédiatement en dessous, c’est plus rapide
javac src\\*.java -d bin