21 Stimmen

Wie kopiere ich mit Ant Dateien in eine bestehende JAR-Datei?

Ich habe ein Projekt, das auf Ressourcen innerhalb seiner eigenen JAR-Datei zugreifen muss. Wenn ich die JAR-Datei für das Projekt erstelle, möchte ich ein Verzeichnis in diese JAR-Datei kopieren (ich schätze, das ZIP-Äquivalent wäre das "Hinzufügen" des Verzeichnisses zur bestehenden ZIP-Datei). Ich möchte, dass das Kopieren erst erfolgt, nachdem die JAR-Datei erstellt wurde (und ich möchte natürlich nicht, dass das Kopieren erfolgt, wenn ich die JAR-Datei bereinige und lösche).

Derzeit sieht die Build-Datei wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<project name="foobar" basedir=".." default="jar">

    <!-- project-specific properties -->
    <property name="project.path" value="my/project/dir/foobar" />

    <patternset id="project.include">
        <include name="${project.path}/**" />
    </patternset>
    <patternset id="project.jar.include">
        <include name="${project.path}/**" />
    </patternset>

    <import file="common-tasks.xml" />

    <property name="jar.file" location="${test.dir}/foobar.jar" />    
    <property name="manifest.file" location="misc/foobar.manifest" />
</project>

Einige der Build-Tasks werden von einer anderen Datei (common-tasks.xml) aufgerufen, die ich hier nicht anzeigen kann.

0 Stimmen

Warum fügen Sie die Ressourcen nicht einfach bei der Erstellung der JAR-Datei hinzu? Das ist, was ich in Builds tun, wo ich JAR-Dateien, die Nicht-Code-Ressourcen in ihnen enthalten haben.

0 Stimmen

Denn die Aufgabe, die für die Erstellung der JAR-Datei definiert ist, ist in einer anderen Datei definiert, die ich nicht ändern kann.

0 Stimmen

Das würde genügen! Tja. Ich bin froh, dass andere auf eine Weise geantwortet haben, die Ihr Problem löst.

19voto

OscarRyz Punkte 189898
<jar update="true">
...
</jar>

13voto

Vladimir Punkte 6753

Die Aufgaben Jar/Ear Ant sind Unteraufgaben der allgemeineren Zip-Aufgabe . Dies bedeutet, dass Sie auch Folgendes verwenden können zipfileset in Ihrer Jar-Aufgabe:

<jar destfile="${jar.file}" basedir="...">
    <zipfileset dir="${project.path}" includes="*.jar" prefix="libs"/>
</jar>

Ich habe auch gesehen, dass Sie eine separate Manifestdatei zur Aufnahme in das Jar definieren. Sie können auch eine verschachtelte manifest Befehl:

<jar destfile="@{destfile}" basedir="@{basedir}">
    <manifest>
        <attribute name="Built-By" value="..."/>
        <attribute name="Built-Date" value="..."/>

        <attribute name="Implementation-Title" value="..."/>
        <attribute name="Implementation-Version" value="..."/>
        <attribute name="Implementation-Vendor" value="..."/>
    </manifest>
</jar>

4voto

Handerson Punkte 375

Eine Möglichkeit ist die Verwendung der Ant-Aufgaben:

  1. Entpacken - Das Jar ist ein temporärer Ordner, um zu explodieren.
  2. Kopieren - um den gewünschten Ordner in den temp-Ordner zu kopieren, und
  3. Gefäß - mit "update" auf true, um den temporären Ordner wieder in die ursprüngliche jar-Datei zu packen.

Die Ameise Handbuch enthält Beispiele dafür, wie man es macht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X