2009-06-08 6 views
2

Je travaille avec ant sur linux en utilisant la ligne de commande. J'ai une simple étape de construction avec javac. Cela compile correctement mais crée une structure de répertoire sous build comme mon espace de noms.Travailler avec la structure d'espace de noms/répertoire

-à-dire: ./build/com/crosse/samplespace/SampleProgram.class

Comment puis-je obtenir cette sortie dans un répertoire (où il est plus facile d'appeler java dessus).

J'ai essayé

<target name="output" depends="compile"> 
      <copy todir="${output}"> 
        <fileset dir="${build}" includes="**/*.class"/> 
      </copy> 
</target> 

mais qui répète la même chose dans mon répertoire de sortie. Comment puis-je utiliser ant pour tout mettre dans un seul répertoire?

Ou comment utiliser une étape ant pour copier un autre fichier dans la racine de ce chemin (un fichier de configuration apache commons)? Edit: Ceci est principalement un facteur de commodité, je suis fatigué de naviguer à travers les mêmes 3 répertoires pour exécuter mon programme.

Répondre

2

Qu'en est-il de la création d'un fichier jar contenant tous vos fichiers (classes et autres ressources)? Un pot a également une classe 'default' dont la méthode principale est exécutée lorsque l'utilisateur double-clique dessus ou l'appelle en utilisant java -jar <jar-file>. Vous pouvez utiliser le Ant jar task. A côté de cela, il est important de garder la structure de votre répertoire (en dehors d'un pot), sinon le chargeur de classe java ne sera pas content quand il devra charger ces classes. Ou ai-je mal compris votre question?

0

Vous pouvez accomplir ce que vous voulez faire en utilisant le flattenmapper mais je n'arrive pas à comprendre la raison valable que vous auriez pour le faire.

1

Pour répondre à votre question, vous devez utiliser un flatten mapper, comme l'indique carej. La tâche copy a même un raccourci pour elle:

<copy todir="${output}" flatten="yes"> 
    <fileset dir="${build}" includes="**/*.class"/> 
</copy> 

Cependant, je ne comprends pas ce que vous espérez accomplir avec cela. L'environnement d'exécution Java s'attend à ce que les fichiers de classe se trouvent dans une structure de répertoire qui reflète la structure du package. Copier les fichiers de classe dans le répertoire de niveau supérieur ne fonctionnera pas, sauf si les classes sont dans le package par défaut (il n'y a pas d'instruction package dans les fichiers .java). Si vous voulez éviter d'avoir à changer manuellement de répertoire, vous pouvez toujours ajouter une cible à votre fichier de construction ant qui appelle la tâche java avec le chemin de classe approprié et d'autres paramètres. Par exemple:

<target name="run" depends="compile"> 
    <java classname="com.crosse.samplespace.SampleProgram" 
      classpath=".:build"/> 
</target> 
Questions connexes