2013-07-12 9 views
5

Mam aplikację dla przedsiębiorstw, która jest w trakcie przekształcania z wersji Ant do Maven. Jest prawie całkowicie nawrócony; to jest ostatnia rzecz, którą muszę naprawić. Aplikacja jest pakowana jako plik EAR zawierający dwa WAR i ma moduł JAR, który zapewnia wszystkie podstawowe funkcje aplikacji.Dlaczego wtyczka Maven JAR nie zawiera niektórych zasobów?

Używam biblioteki szablonów Freemarker do generowania, między innymi, treści wiadomości dla automatycznych wiadomości e-mail wysyłanych przez aplikację. Freemarker potrzebuje plików szablonów * .ftl, aby znaleźć się w ścieżce klas, a ponieważ jest to podstawowa funkcjonalność aplikacji niezwiązana z jedną wojną lub inną, musi znajdować się w pliku JAR.

Moduł Maven który określa JAR ma następującą 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> 

pliki * .ftl znajdują się w src/main/resources/template /, a niektóre w podkatalogu w/szablonu. Istnieją inne pliki w src/main/resources - niektóre .properties i niektóre .xml, niektóre w katalogu głównym, a inne w strukturze katalogów.

Po uruchomieniu fazy pakietu na tym module (lub na elemencie nadrzędnym) katalog docelowy/classes utworzony w ramach procesu budowania zawiera katalog szablonów, który z kolei zawiera cały plik * .ftl, *. pliki xml i * .properties o odpowiedniej strukturze katalogów. Jeśli JAR JAR ten katalog zostanie ręcznie, wszystko działa idealnie.

Oto, gdzie to staje się dziwne i gubię się: kiedy maven-jar-plugin tworzy JAR, zawiera pliki XML i właściwości, ale katalog szablonów jest całkowicie nieobecny w JAR i jego zawartości nie ma nigdzie znaleźć .

Jak widać powyżej, próbowałem jednoznacznie włączając **/*. Ftl. To nie robi różnicy; Mogę wykluczyć cały tag "obejmuje" i otrzymuję dokładnie to samo zachowanie.

Używam Maven 3.0.5 i maven-jar-plugin 2.4.

Odpowiedz

10

Ustaliłem odpowiedź PRAWO po przesłaniu tego pytania.

W POM dominującej, miałem następujące:

<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> 

dodałem \*\*/*.ftl do listy obejmuje i teraz działa.

EDYCJA: Jeszcze lepiej, usunąłem całkowicie znacznik konfiguracji i nadal działa. Myślę, że to była pozostałość po tym, zanim zorientowałem się, że pliki .properties i inne rzeczy, których potrzebowałem w ścieżce klas, muszą znajdować się w src/main/resources, a nie src/main/java.

Powiązane problemy