2009-04-29 5 views
31

ich meine eigene build.xml erstellt, die hat:Ant Kompilierung kopiert nicht die Ressourcen

<target name="compile"> 
    <mkdir dir="build"/> 
    <javac destdir="build"> 
     <src path="src"/> 
    </javac> 
</target> 

<target name="build" depends="compile"> 
    <mkdir dir="dist"/> 
    <jar destfile="dist/app.jar" basedir="build" /> 
</target> 

<target name="run" depends="compile"> 
    <java classname="webserver.Loader" classpath="build" fork="true" />  
</target> 

Es funktioniert großartig. Wenn ich am ant rufe, kompiliert und führt es meine Anwendung aus, aber meine Anwendung hat ein Paket mit Symbolen und wird nicht in einen Ordner "build" verschoben, so dass meine Anwendung mit einer Ausnahme endet, dass sie meine Symbole nicht finden konnte. Wenn ich sie alleine bewege, funktioniert es.

Ich versuchte

<copy todir="build/app/icons"> 
    <fileset dir="src/app/icons"/> 
</copy> 

Es funktioniert zu verwenden, aber ich möchte es ohne den Kopierbefehl tun. Gibt es einen Parameter für Javac? Oder etwas anderes?

Vielen Dank für die Antwort.

Antwort

23

Entschuldigung, Sie müssen Nicht-Java-Dateien manuell kopieren. Ressourcen sind technisch nicht "Quelle". Die Befehlszeile javac wird keine Ressourcendateien von Ihrem Quellverzeichnis in das Ausgabeverzeichnis kopieren, auch nicht die javac-Aufgabe von ant.

+0

Es scheint, dass das Einhängen in den Eclipse-Java-Compiler durch ant automatisch Nicht-Java-Dateien in das Ausgabeverzeichnis kopiert. Als ich stattdessen zu javac ant tasks wechselte, musste ich tun, was Chris Winters vorgeschlagen hatte. –

+0

Seit ich diese Antwort geschrieben habe, habe ich fast ausschließlich Maven für Java-Projekte verwendet. Es ist eine anständig steile Lernkurve gegen Ant, aber es lohnt sich. –

4

Nein, gibt es nicht. Die Kopieraufgabe ist die richtige Methode zum Kopieren von Ressourcen in Ihre Build-Ordner.

43

Es gibt keinen solchen Parameter. Sie können mit allen Arten von Dateien zwischen Verzeichnissen kopieren:

<copy todir="build"> 
    <fileset dir="src" 
      includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" /> 
</copy> 
+18

einfacher: exclude = "**/*. Java" statt include –

+0

Genau was ich wollte! (toying mit, ob zu tun, schließt Java ein oder aus, oder schließt nichts aus, um die Quelle mit dem jar zu versenden, großartig für das Debuggen.) –

+6

Nicht ausschließen, aber ausschließen: chrise

11

Sie dies tun, können das fileset Element der jar Aufgabe anstelle des Kopierens die Dateien manuell. Zum Beispiel:

<jar destfile="dist/app.jar" basedir="build"> 
    <fileset dir="src" includes="app/icons/**" /> 
</jar> 

Dies wird alles in src/app/icons/ zum app/icons Pfad in Ihrer .jar-Datei kopieren.

+0

Die anderen Antworten sagen Ihnen, warum das nicht möglich ist. Dieser sagt dir, wie es geht. Und es funktioniert. Dies sollte aufgewertet werden. – philburk