2013-05-04 9 views
18

Ho una versione leggermente diversa di the question che ho creato di recente. Ho un progetto diMaven sotto Netbeans 7.3, che non ha alcun file di build.xml per configurare le opzioni di costruzione, mentre v'è la pom.xml che uso per importare altre librerie. Ora, ho un file di testo (diciamo textfile.txt) memorizzato nella cartella del progetto in Netbeans 7.3, ad es.Spostare un file di testo nella cartella di destinazione durante la compilazione di un progetto Maven

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

Quando compilo ricevo una cartella target in cui il file jar è messo in, ad esempio,

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

Come posso fare il textfile.txt file che viene copiato nella cartella di destinazione quando compilo il progetto Maven?

risposta

28

Un primo modo è inserire i file in src/main/resources ovvero la cartella dedicata a memorizzare le risorse rispettate, ovvero le risorse incluse nel file jar (ad esempio immagini per le icone).

Se è necessario rendere il file di configurazione da distribuire con il jar, ma separato da esso, è necessario modificare il file pom.xml. Una possibile risposta è quella di aggiungere il seguente plugin tra i tag <plugins> e </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> 

Inoltre, come si può leggere here è anche possibile importare tutte le risorse da una directory "input" a una directory "output" all'interno di destinazione utilizzando il plugin dedicato, ad esempio:

<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

Grazie! Non sono sicuro che il primo plugin sia usato correttamente, ma funziona bene. –

+0

Fantastico, questo aiuta molto, grazie JeanValjean! –

11

il modo più semplice, per usare una risorsa che ne so (ulteriori informazioni sulla configurazione di risorse si possono trovare qui: https://maven.apache.org/plugins/maven-resources-plugin/):

<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

Come assicurarsi che textfile.txt venga copiato anche nel file jar? – Sam

+0

ho capito. Grazie. – Sam

4

di avere un absol il controllo dell'output del tuo build è possibile utilizzare il "Plugin di Apache Maven Assembly". Puoi definire praticamente tutto (formato, sottocartelle ...).

Il plug-in di assemblaggio per Maven è destinato principalmente a consentire agli utenti di aggregare l'output del progetto insieme alle sue dipendenze, moduli, documentazione del sito e altri file in un unico archivio distribuibile.

More info

è necessario installare il plugin nel file pom:

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

Nel tuo caso il descrittore "yourassembly.xml" sarebbe la seguente:

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