2010-09-27 5 views
0

Je commence à étudier ANT aujourd'hui afin de faciliter la compilation de Java. J'ai écrit un simple script ANT qui n'utilise que la commande javac.comment se fait-il que la commande ANT javac ajoute des répertoires supplémentaires?

Ce que je suis en train de compiler est ..... \ head_first \ src \ com \ masatosan \ constant.java (source)

dans le répertoire de destination:

... .. \ classes head_first \ WEB-INF \ \ com \ masatosan \ conf

Ainsi, le résultat ressemblerait à ceci:

..... \ head_first \ WEB-INF \ classes \ com \ masatosan \ conf \ constant.class

Mais je ne peux pas comprendre pourquoi le résultat réel ajoute les répertoires "/ com/masatosan/conf" dans le dossier de destination, il ressemble à:

C: \ Programmes \ Apache Software Foundation \ Tomcat 6.0 \ webapps \ head_first \ WEB-INF \ classes \ com \ masatosan \ conf \ com \ masatosan \ constant.class

Quelqu'un peut-il me dire comment résoudre ce problème? ?

ANT

<project name="CompileMasatosan" 
    basedir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan"> 
    <description> 
     masatosan compiler 
    </description> 
    <property name="confSrc" 
     location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan\conf" /> 
    <property name="confDest" 
     location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes\com\masatosan\conf" /> 

    <target name="compileConfSrc"> 
     <javac srcdir="${confSrc}" destdir="${confDest}" /> 
    </target> 
</project> 

MISE À JOUR

Je ne savais pas complier crée des répertoires basés sur le nom du package.

Le nom du paquet de constant.java a été com.masatosan.conf de sorte que complier crée "/ com/masatosan/conf /"

+1

com \ masatosan \ conf est très probablement le paquet que vous » ve donné dans le fichier java constant – JoseK

+0

il ressemble à l'emballage de constants.class est com.masatosan, et il veut que ce soit com.masatosan.conf –

Répondre

2

Vous essayez de demander à ANT de modifier le package car vous souhaitez que le fichier constant.class soit placé dans le package com.masatosan.conf plutôt que dans le package com.masatosan. Le processus de compilation Ant va créer les sous-répertoires de paquetages appropriés, c'est pourquoi vous voyez com \ masatosan créé sous le dest.

Je ne pense pas que vous pouvez dire à ANT de changer le paquet d'un fichier source, ce que vous essayez de faire en injectant un répertoire conf supplémentaire. Vous pouvez soit créer un répertoire conf et avoir un conf\com\masatosan\constants.class ou le mettre sous classes\com\masatosan\constants.class, mais vous ne pouvez pas faire com\masatosan\conf\constants.class puisque cela modifie le paquet de constantes.classe à com.masatosan.conf

Ou tout simplement changer le paquet de constants.class à com \ masatosan \ conf et modifier votre fichier fourmi à:

<property name="confDest" location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes" />

+0

Merci pour le conseil les gars! Mais comment est-ce que complier sait qu'il devrait créer exactement "/ com/masatosan/conf" pour moi, par exemple, "head_first/com/masatosan/conf"? Oh ... est-ce parce que le nom de paquet de constant.java est "com.masatosan.conf"? –

+0

J'ai eu cette réponse :) http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html –

1

En effet, le compilateur crée le répertoire package stucture dans le répertoire de destination que vous spécifier. La classe constant se trouve dans le package com.masatosan, donc sous classes\com\masatosan\conf, le compilateur crée deux autres répertoires pour le package, com\masatosan, et place la classe compilée (constant.class) dans ce package.

Votre répertoire de destination doit simplement être C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes. Les répertoires com et masatosan seront créés pour vous.

2

C'est à cause du nom du paquet. Vous avez un fichier Java dans le package com.masatosan. Vous pouvez résoudre ce problème de deux manières: déplacez la classe vers le package par défaut ou définissez la valeur $ {confDest} sur \ head_first \ WEB-INF \ classes \ only.

Questions connexes