web-dev-qa-db-fra.com

Compiler des fichiers Java dans tous les sous-dossiers?

Comment compiler tous les fichiers Java dans tous les sous-dossiers sous Unix, en utilisant javac?

18
aneuryzm

Utilisez un outil de construction tel que Ant ou Maven . Les deux vous permettent de gérer les dépendances bien mieux que ce que vous pouvez accomplir, par exemple. l'outil find UNIX. And et Maven vous permettent également de définir des tâches personnalisées à exécuter en plus de la compilation. Maven est en outre livré avec des conventions pour la gestion des dépendances externes dans des référentiels distants, ainsi que des conventions pour l'exécution de tests unitaires et de fonctionnalités prenant en charge l'intégration continue.

Même si vous avez juste besoin de compiler vos fichiers source de temps en temps, vous constaterez probablement que la mise en place d'un fichier Ant build.xml simple peut vous faire gagner beaucoup de temps.

Enfin, la plupart des populaires IDE et applications de l'éditeur de code ont une sorte d'intégration avec les scripts de génération Ant, vous pouvez donc exécuter toutes les tâches Ant à partir de l'éditeur. NetBeans , Eclipse , IDEA and more a également un support intégré pour Maven.

Lisez ceci d’abord, si vous débutez avec Ant. Voici l'exemple de fichier de construction à partir du lien:

<project name="MyProject" default="dist" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- set global properties for this build -->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist"  location="dist"/>

  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="compile" depends="init"
        description="compile the source " >
    <!-- Compile the Java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>

  <target name="dist" depends="compile"
        description="generate the distribution" >
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/lib"/>

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
    <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
  </target>

  <target name="clean"
        description="clean up" >
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>

Une fois familiarisé avec Ant, il vous sera plus facile de passer à Maven.

17
Kim Burgaard

Sous Windows ...

Créer un fichier batch:

for /r %%a in (.) do (javac %%a\*.Java)

... puis exécutez-le dans le dossier source de niveau supérieur.

Sous Linux ...

javac $(find ./rootdir/* | grep .Java)

Les deux réponses tirées de ce fil ...

http://forums.Oracle.com/forums/thread.jspa?threadID=1518437&tstart=15

Mais comme d'autres l'ont suggéré, un outil de construction serait probablement utile.

26
Orbit

Je ne sais pas si c'est la meilleure façon, mais cela devrait marcher:

find . -name "*.Java" | xargs javac
7
krtek

Utilisez Ant pour écrire un script afin de compiler autant de dossiers source que vous le souhaitez.

2
Andrey Adamovich

Utilisez Maven (comme alternative plus moderne à Ant).

Utilisez un IDE, comme Eclipse (tous les IDE que je connais compileront avec plaisir plusieurs dossiers sources pour vous)

1

Une autre façon (moins flexible), si vous connaissez le nombre de niveaux de dossier:

javac *.Java */*.Java */*/*.Java */*/*/*.Java */*/*/*/*.Java ...

En fonction de votre shell, vous devrez peut-être configurer le développement de modèles ne correspondant pas, en bash avec shopt -s nullglob. Par exemple, j'utilise la fonction Shell suivante pour rechercher du texte dans mes fichiers Java:

function jgrep ()
{
    (
      shopt -s nullglob
      egrep --color=ALWAYS -n "$@" *.tex *.Java */*.Java */*/*.Java */*/*/*.Java */*/*/*/*.Java */*/*/*/*/*.Java
    )
} 

jgrep String

Mais vraiment, utilisez un outil de compilation, comme l'ont dit les autres.

0
Paŭlo Ebermann