Warum enthält das Maven JAR-Plugin keine Ressourcen?
Ich habe eine Unternehmensanwendung, die gerade von einem Ant-Build zu Maven konvertiert wird. Es ist fast vollständig konvertiert; Dies ist das allerletzte, was ich reparieren muss. Die Anwendung ist als EAR-Datei gepackt, die zwei WAR-Dateien enthält und über ein JAR-Modul verfügt, das die gesamte Kernfunktionalität der Anwendung bereitstellt.
Ich benutze die Vorlagenbibliothek von Freemarker, um unter anderem Nachrichtentexte für automatische E-Mails zu generieren, die von der Anwendung gesendet werden. Freemarker benötigt seine * .ftl-Vorlagendateien, um im Klassenpfad zu sein, und da dies eine Kernanwendungsfunktionalität ist, die für das eine oder andere WAR nicht spezifisch ist, muss sie sich in der JAR befinden.
Das Maven-Modul, das die JAR definiert, hat den folgenden POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<relativePath>../../pom.xml</relativePath>
<groupId>com.company.project</groupId>
<artifactId>projectName</artifactId>
<version>1.8.0</version>
</parent>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<name>Core Application</name>
<profiles>
<!-- snip -->
</profiles>
<dependencies>
<!-- snip -->
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.ftl</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<!-- snip -->
</plugins>
</build>
</project>
Die * .ftl-Dateien befinden sich unter src / main / resources / template /, einige in einem Unterverzeichnis in template /. Es gibt andere Dateien in src / main / resources - einige .properties und einige .xml, einige im Stammverzeichnis und einige in einer Verzeichnisstruktur.
Wenn ich die Paketphase für dieses Modul (oder für das übergeordnete Modul) ausführe, enthält das Ziel- / Klassenverzeichnis, das als Teil des Erstellungsprozesses erstellt wurde, das Vorlagenverzeichnis, das wiederum alle Dateien * .ftl, * .xml und * enthält. .properties-Dateien mit einer geeigneten Verzeichnisstruktur. Wenn ich dieses Verzeichnis manuell JAR, funktioniert alles einwandfrei.
Hier wird das merkwürdig und ich verliere mich: Wenn das maven-jar-plugin die JAR erstellt, enthält es die XML- und Eigenschaftendateien, aber das Vorlagenverzeichnis fehlt vollständig in der JAR und sein Inhalt ist nirgends zu finden.
Wie Sie oben sehen können, habe ich explizit versucht, ** / *. Ftl einzuschließen. Es macht keinen Unterschied; Ich kann das gesamte "Includes" -Tag ausschließen und bekomme genau das gleiche Verhalten.
Ich benutze Maven 3.0.5 und Maven-Jar-Plugin 2.4.