2013-07-12 9 views
5

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.

Antwort

10

Ich fand die Antwort RECHT nach dem Einreichen dieser Frage.

In einem übergeordneten POM, hatte ich folgendes:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <includes> 
      <include>**/*.class</include> 
      <include>**/*.jdo</include> 
      <include>**/*.properties</include> 
      <include>**/*.xml</include> 
     </includes> 
    </configuration> 
</plugin> 

I \*\*/*.ftl in die Liste der enthält hinzugefügt und arbeitet es jetzt.

EDIT: Noch besser, ich habe das Konfigurations-Tag vollständig entfernt, und es funktioniert immer noch. Ich denke, es war ein Rest von, bevor ich herausfand, dass die .properties-Dateien und andere Dinge, die ich auf dem Klassenpfad benötigte, in src/main/resources und nicht in src/main/java sein mussten.

Verwandte Themen