Ich habe eine Unternehmensanwendung, die ich gerade von einem Ant-Build zu Maven umwandeln möchte. Es ist fast vollständig konvertiert; Das ist das letzte, was ich reparieren muss. Die Anwendung ist als EAR-Datei gepackt, die zwei WARs enthält und über ein JAR-Modul verfügt, das alle Kernfunktionen der Anwendung bereitstellt.Warum enthält das Maven JAR-Plugin keine Ressourcen?
Ich benutze die Freemarker Templating-Bibliothek, um unter anderem Nachrichtentexte für automatische E-Mails zu generieren, die von der Anwendung gesendet werden. Freemarker benötigt seine * .ftl-Vorlagendateien, um auf dem Classpath zu sein, und da dies die Hauptanwendungsfunktionalität ist, die nicht für eine WAR oder die andere spezifisch ist, muss sie in der JAR sein.
Das Maven-Modul, das die JAR definiert hat folgende 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 in src/main/resources/template/befinden, mit einigen in einem Unterverzeichnis innerhalb template /. Es gibt andere Dateien in src/main/resources - einige .properties und einige .xml, einige im root und einige in einer Verzeichnisstruktur.
Wenn ich die Paketphase auf diesem Modul (oder auf dem Eltern) ausführen, enthält das Verzeichnis target/classes, das als Teil des Erstellungsprozesses erstellt wird, das Vorlagenverzeichnis, das wiederum alle * .ftl, * enthält. XML- und * .properties-Dateien mit einer entsprechenden Verzeichnisstruktur. Wenn ich dieses Verzeichnis manuell öffne, funktioniert alles einwandfrei.
Hier ist, wo dies komisch wird und ich verloren gehe: Wenn Maven-JAR-Plugin das JAR erstellt, enthält es die XML- und Eigenschaften-Dateien, aber das Vorlagenverzeichnis ist komplett aus dem JAR und sein Inhalt ist nirgendwo 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.