2014-01-17 12 views
7

Ich möchte ein Glas aus dem Inhalt eines WAR mithilfe von Gradle erstellen. Das Ergebnis, das ich möchte, ist ziemlich wie das, was die archiveClasses = true setting of maven-war-plugin tut.Erstellen Sie eine JAR mit Klassen und Ressourcen von Webapp mit Gradle

Ich verstehe, dass das Graples War Plugin scheint dies nicht zu tun (wie this stackoverflow question).

Gibt es eine Möglichkeit, dies manuell zu tun? Sagen Sie, indem Sie die Task "gradle jar" bearbeiten, um die benötigten Teile aus dem WEB-INF-Ordner zu sammeln.

Wenn ich nur die Standard-Jar-Aufgabe verwende, erhält sie nicht die Ressourcen aus dem Verzeichnis WEB-INF.

Der Grund, warum ich das tun will, ist, weil ich eine WAR modularisiert habe und die Module auf gemeinsamen Ressourcen in der WAR (FreeMarker-Dateien in meinem Fall) angewiesen sind. Ich möchte in der Lage sein, jedes Modul zu testen, abhängig von JAR, das aus dem WAR erstellt wurde.

Ich verstehe, ich könnte auch eine "gemeinsame" Jar erstellen, die alle Ressourcen enthielt und sowohl die WAR und das Modul davon abhängen, aber es wäre bequemer, eine JAR-Form der WAR wie im Maven zu erstellen Kriegs-Plugin.

+0

Der Gradle WAR-Plug-in nicht scheint diese zu haben Arten von Funktionen noch; wenig überraschend. Ich denke, vorläufig werden Sie auf der gemeinsamen JAR-Route stecken bleiben, wenn Sie kurzfristig brauchen. Könnte etwas hacky versuchen, wie Grades 'Exec-Task aufzurufen, um einen Maven-Prozess auszuführen, wenn du dich abenteuerlustig fühlst. – Durandal

+0

Es ist einfach zu erreichen. Was genau sollte das Glas enthalten? –

+0

Ich möchte, dass das jar tut es ist normale Quellpfad (was ich vermute ist sourseSet.main.output und vielleicht sourceSet.main.resources?) Plus den Inhalt von WEB-INF mit Ausnahme von Klassen und lib wie in meinem Fall gibt es Ressourcen in Verzeichnissen dort. Ein Beispiel, das ein zusätzliches Verzeichnis enthält und ein anderes ausschließt, wäre wunderbar! –

Antwort

3

Also hier ist, wie ich es gelöst (nicht sicher, ob dies der beste Weg ist):

jar { 
    from ("${projectDir}/src/main/webapp/WEB-INF") { 
     include('freemarker/**') 
    } 
} 

ich auch this alternative in den Gradle Foren gefunden, aber ich konnte nicht die Linie resources.srcDir("src/main/webapp").exclude('images/') zu kompilieren, aber Ich mag die Idee, irgendwie zu den Standardressourcenverzeichnissen der Jar-Aufgabe hinzuzufügen. Bearbeiten: Ich denke, mein erstes Beispiel oben ist so gut wie es geht.

1

Sie können diese Both src/main/resources und scr/main/webapp in der Wurzel der erstellten JAR-Datei enthalten:

sourceSets { 
    main { 
     resources { 
      srcDirs "src/main/resources", "src/main/webapp" 
     } 
    } 
} 
+0

Sollte ich dies innerhalb der Jar-Aufgabe verwenden? –

+0

@CarlPritchett Nein, das sollte in der Wurzel der Gradle-Datei sein! – oae

Verwandte Themen