2009-05-15 11 views
2

Je travaille sur un projet d'automatisation pour mon employeur. Nous avons un pool pour chaque révision de notre code source. Lorsque vous téléchargez une révision, vous devez créer une structure de répertoire avec un groupe d'inclusions tierces pour éventuellement créer le projet. J'ai automatisé tout ce processus jusqu'à ce que mon script (.bat) compile chaque application Java exécutable. Il existe de nombreuses applications à ce projet unique, et la liste des répertoires ressemble à ceci:Comment automatiser la compilation d'un grand projet Java?

Proj Name 
    -variousincludesfolder1 
    -variousincludesfolder2 
    -variousincludesfolder3 
    -variousincludesfolder4 
    -runnableapplicationsandmoreincludes 
     -con.java 

En ce moment, je voudrais faire une compilation automatisée de con.java, mais je ne sais pas où commencer. Les gens ont suggéré que j'essaie Ant, mais toute génération automatique de fichiers Ant que j'utilise avec Eclipse semble juste suffisante pour construire con.java quand un fichier de projet actif existe. Est-il possible d'automatiser ceci sans utiliser eclipse, au point que le fichier batch génère lui-même un fichier .jar?

Répondre

6

C'est sans aucun doute un emploi pour Ant. Ne comptez pas sur les fichiers Ant générés par Eclipse; lisez le manual et écrivez-en un vous-même. (Vous découvrirez probablement que Ant fait aussi des choses que vous ne pensiez pas faire dans votre script de construction.)

Pour être plus précis, here is the documentation for the jar task.

+0

Mais peut Ant être utilisé pour rechercher automatiquement et compiler toutes les classes associées qui peuvent être nécessaires, mais ceux qui comprend le changement souvent et sont généralement compliquées et prennent du temps pour trouver qui sont nécessaires ? Merci. – Monster

+0

Je ne suis pas sûr de ce que vous voulez dire, alors je vais répondre à une autre question: Comment faites-vous cela maintenant? –

+0

Eh bien, d'accord, avant de compiler quelque chose ou d'utiliser eclipse, j'ai une structure de répertoires avec des fichiers java. Certains d'entre eux peuvent être compilés dans Java Applications. Mais en raison de la taille du projet, une application Java peut être interdépendante sur des centaines ou même plus de 1000 fichiers sources. Afin de maintenant, j'importer ma structure de répertoire dans un nouveau projet Eclipse. Ensuite, je vais compiler mon application (con.java), et il s'occupe de compiler tous les autres fichiers de classe. Mais je voudrais faire tout cela à partir de la ligne de commande. – Monster

3

Vous pouvez définir wildcard et motif correspond à inclure/exclure toutes sortes de fichiers et dossiers dans votre construction. Jetez un oeil à la Ant manual pour voir comment les choses comme filesets fonctionnent avec inclure et exclure les filtres.

Aussi, lisez le tutorial.

Voici un simple fichier de construction qui ressemble à compiler tous les fichiers java et référence tous les pots. Placez-le dans le répertoire de niveau supérieur:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" 
    href="http://www.ibm.com/developerworks/xml/library/x-antxsl/examples/example2/ant2html.xsl"?> 
<project name="Proj Name" default="build" basedir="."> 
    <property name="src.dir" value="${basedir}" description="base folder where the source files will be found. Typically under /src, but could be anywhere. Defaulting to root directory of the project" /> 
    <property name="build.dir" value="build" description="Where to put build files, separate from src and resource files." /> 

    <path id="master-classpath"> 
     <fileset dir="${basedir}" description="looks for any jar file under the root directory"> 
      <include name="**/*.jar" /> 
     </fileset> 
    </path> 

    <target name="build" description="Compile all JAVA files in the project"> 
     <javac srcdir="${src.dir}" 
      destdir="${build.dir}/classes" 
      debug="true" 
      deprecation="true" 
      verbose="false" 
      optimize="false" 
      failonerror="true"> 
      <!--master-classpath is defined above to include any jar files in the project subdirectories(can be customized to include/exclude)--> 
      <classpath refid="master-classpath"/> 
      <!--If you want to define a pattern of files/folders to exclude from compilation...--> 
      <exclude name="**/realm/**"/> 
     </javac> 
    </target> 

</project>