Frage

Sagen wir, ich habe meine Quellen in meinem src / Baum (und möglicherweise in meinem Test / Baum). Sagen wir, ich würde nur kompilieren wie Teil von diesem Baum. Die Gründe, warum ich will vielleicht tun, dass verschiedene sind. Nur als Beispiel, könnte ich die kleinstmögliche Glas (ohne bestimmte Klassen einschließlich) erstellen möchten, oder könnte ich möchte die schnellste Zeit für kompilieren, was ich zu kompilieren. Ich möchte unbedingt alle Abhängigkeiten kompilieren, aber!

Dies kann leicht von der Kommandozeile mit erreicht werden:

javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java

Nun, wie können Sie das tun, mit Ameise? Die Javac ant Aufgabe stellt alles :

  

Das Quell- und Zielverzeichnis   wird für Java rekursiv überprüft   Quelldateien zu erstellen.

kann man die excludes und includes Parameter verwenden, aber sie sind für diesen Zweck problematisch. In der Tat scheint es, dass man explizit Setup alle includes (nicht automatische Abhängigkeits Lookup) und noch schlimmer , das a href = " schließt hat Priorität umfasst :

  

Wenn beide Inklusion und Exklusion sind   gebraucht, nur Dateien / Verzeichnisse, die   Spiel mindestens eines der gehören   Muster und nicht übereinstimmen jeder von der   Exclude-Mustern verwendet werden.

So können Sie nicht verwenden

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
            excludes="**/*.java" includes="src/path/to/MyClass.java" />  

Weil es nichts kompilieren: - (

Gibt es eine Möglichkeit, dass die einfachen Kommandozeilen-javac mit ant erreichen?


EDITED: Vielen Dank für Ihre Antwort, Sadie, ich bin zu akzeptieren, weil es Arbeit in der Art und Weise tut Ich war in dieser Frage fragen. Aber ich habe ein paar Kommentare (zu lange im Kommentarfeld Ihrer Antwort zu sein):

1) Ich habe die Dokumentation gelesen haben (siehe Links oben), aber es ist unklar, dass mit nur includes Sie ohne eigentlich auch alles andere

2) Wenn Sie includes nur ant Protokolle so etwas wie

[javac] Compiling 1 source file to /my/path/to/build

auch wenn die Abhängigkeiten machen es (viel) mehr als nur eine Quelldatei kompilieren.

War es hilfreich?

Lösung

Warum sind ohne Sie als auch darunter? Wenn Sie mindestens eine umfassen, dann werden die Dateien nur dann kompiliert, wenn sie explizit eingeschlossen sind. So sollte diese Arbeit:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
        includes="src/path/to/MyClass.java" />

oder flexibler:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath">
    <include name="src/path/to/MyClass.java"/>
    <include name="src/path/to/AnotherClass.java"/>
</javac>

Um nur bestimmte Pakete oder Klassen in einem Glas, ein fileset Attribut

<jar jarfile="${outlib}/something.jar">
    <fileset dir="${build.dir}">
        <include name='src/path/to/classes' />
    </fileset>
</jar>

Auch hier können Sie mehr verwenden umfasst separate Pakete zu kombinieren. Experimentieren Sie mit umfasst und der Dokumentation lesen und Sie sind sicher, dass die Antwort, die Sie finden müssen.

Andere Tipps

Alte Frage, aber ich war mit dem gleichen Problem zu kämpfen und ein eine elegantere Lösung gefunden. Also hier ist es, für die Zukunft:

Nach dem ant docs das <javac> Element ist eine implizite <fileset> und als solche nehmen Selektoren wie <filename name="**/MyClass.java"/>, so würde dies MyClass.java nur kompilieren:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath">
  <filename name="**/path/to/MyClass.java"/>
</javac>

Eigentlich Ameise nur prüft alles, wenn man einen Compiler zweimal hintereinander ausgeführt werden Sie die zweite bemerken viel schneller ist. Eigentlich kann es leicht dazu gebracht werden, Dinge zu verpassen.

Wenn Sie nicht einmal wollen, dass es alles zu prüfen, Sie gehen zu müssen brechen in kleinere Module / Projekte / Quelle Bäume, so dass Sie ausdrücklich Ameise erzählt sind, was zu kompilieren.

Geben Sie einfach nur das Komma getrennte Liste von Dateien, die Sie erstellen möchten. Nehmen wir beispielsweise

<property name="includeFileList" value="<name of java class>.java"/>

<javac srcdir="${src.dir}" destdir="${build.dir}"
       target="1.6" debug="true" includes="${includeFileList}"/>

Es wird funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top