2013-05-04 6 views
18

Ich habe eine geringfügig andere Version von the question, die ich vor kurzem gemacht habe. Ich habe ein Maven Projekt unter Netbeans 7.3, die keine build.xml Datei haben Gebäude Optionen zu konfigurieren, während es die pom.xml ist, dass ich andere Bibliotheken importieren verwenden. Nun habe ich eine Textdatei (beispielsweise textfile.txt), die in dem Projektordner in Netbeans 7.3 gespeichert ist, z.Verschieben Sie eine Textdatei in Zielordner beim Kompilieren eines Maven-Projekts

project folder 
    textfile.txt 
    src 
    package 
    package.subpackage 
     MyClass.java 

Wenn ich kompilieren bekomme ich einen target Ordner, in dem die jar Datei in wird gestellt, zum Beispiel

project folder 
    textfile.txt 
    target 
    classes 
    generated-sources 
    ....etc 
    test-classes 
    MyProject.jar 
    src 
    package 
    package.subpackage 
     MyClass.java 

Wie kann ich die Datei textfile.txt unter Zielordner kopieren, wenn ich das Maven-Projekt kompiliere?

Antwort

28

Eine erste Möglichkeit besteht darin, die Dateien in src/main/resources zu legen, das ist der Ordner, der gewidmet ist, um die übereinstimmenden Ressourcen zu speichern, d.h. die in der JAR-Datei enthaltenen Ressourcen (z. B. Bilder für die Symbole).

Wenn Sie möchten, dass die Konfigurationsdatei mit dem Jar verteilt wird, aber davon getrennt, müssen Sie die Datei pom.xml editieren. Eine mögliche Antwort ist das Hinzufügen des folgenden Plugins zwischen den Tags <plugins> und </plugins>.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <phase>test</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <echo>Using env.test.properties</echo> 
        <copy file="textfile.txt" tofile="${basedir}/target/textfile.txt"/> 
        </tasks> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

Außerdem ist, wie man lesen kann here Sie können auch alle Ressourcen von einem „Input“ Verzeichnis auf einen „Ausgang“ Verzeichnis innerhalb Ziel importieren, indem Sie den dedizierten Plugin, zB:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/target/output</outputDirectory> 
       <resources>   
        <resource> 
         <directory>input</directory> 
         <filtering>true</filtering> 
        </resource> 
       </resources>    
      </configuration>    
     </execution> 
    </executions> 
</plugin> 
+0

Vielen Dank! Ich bin mir nicht sicher, ob das erste Plugin richtig verwendet wird, aber es funktioniert gut. –

+0

Awesome, das hilft viel, danke JeanValjean! –

11

der einfachste Weg, eine Ressource zu verwenden, wie ich (zusätzliche Informationen über Ressourcen-Konfiguration finden Sie hier: https://maven.apache.org/plugins/maven-resources-plugin/): wissen

<build> 
    <plugins> 
    <!-- your plugins, including or not maven-resource-plugin --> 
    </plugins> 
    <resources> 
    <resource> 
     <filtering>true</filtering><!-- if it is neccessary --> 
     <directory>${project.basedir}</directory><!-- from --> 
     <targetPath>${project.build.directory}</targetPath><!-- to --> 
     <includes><!-- what --> 
     <include>textfile.txt</include> 
     </includes> 
    </resource> 
    </resources> 
</build> 
+0

Wie stelle ich sicher, dass textfile.txt auch in die JAR-Datei kopiert wird? – Sam

+0

ich habe es. Vielen Dank. – Sam

4

um eine absol zu haben Zur Kontrolle der Ausgabe Ihres Builds können Sie das "Apache Maven Assembly Plugin" verwenden. Sie können so ziemlich alles definieren (Format, Unterordner ...). Das Assembly-Plugin für Maven dient in erster Linie dazu, Benutzern zu ermöglichen, die Projektausgabe zusammen mit ihren Abhängigkeiten, Modulen, Site-Dokumentation und anderen Dateien in einem einzigen verteilbaren Archiv zu aggregieren.

More info

Sie haben das Plugin in Ihrer pom-Datei zu installieren:

<plugins> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <descriptors> 
       <descriptor>src/main/assembly/yourassembly.xml</descriptor> 
      </descriptors> 
     </configuration> 
    </plugin> 
</plugins> 

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>x.x</version> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/yourassembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- append to the packaging phase. --> 
        <goals> 
         <goal>single</goal> <!-- goals == mojos --> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</pluginManagement> 

In Ihrem Fall das Prädikat "yourassembly.xml" würde wie folgt aussehen:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>yourassembly</id> 
    <formats> 
    <format>tar.gz</format> 
    <format>dir</format> 
    </formats> 
    <fileSets> 

    <fileSet> 
     <directory>${project.basedir}</directory> 
     <includes> 
     <include>README*</include> 
     <include>LICENSE*</include> 
     <include>NOTICE*</include> 
     </includes> 
     <useDefaultExcludes>true</useDefaultExcludes> 
    </fileSet> 

    <fileSet> 
     <directory>${project.build.directory}</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.jar</include> 
     </includes> 
    </fileSet> 

    <fileSet> 
     <directory>${basedir}</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>textfile.txt</include> 
     </includes> 
    </fileSet> 

    <dependencySets> 
     <dependencySet> 
      <outputDirectory>lib</outputDirectory> 
      <unpack>false</unpack> 
     </dependencySet> 
    </dependencySets> 

    </fileSets> 

</assembly> 
Verwandte Themen