it-swarm.com.de

Verschieben Sie eine Textdatei in den Zielordner, wenn Sie ein Maven-Projekt kompilieren

Ich habe eine etwas andere Version von die Frage , die ich kürzlich gemacht habe. Ich habe ein Maven Projekt unter Netbeans 7.3 , das es nicht gibt irgendein build.xml Datei zum Konfigurieren der Erstellungsoptionen, während pom.xml, mit dem ich andere Bibliotheken importiere. Jetzt habe ich eine Textdatei (sagen wir textfile.txt) im Projektordner in Netbeans 7.3 gespeichert, z.

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

Beim Kompilieren erhalte ich einen target -Ordner, in den die jar -Datei eingefügt wird, z.

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 erstellen, die beim Kompilieren des Maven-Projekts in den Zielordner kopiert wird?

27
mat_boy

Eine erste Möglichkeit besteht darin, die Dateien in den Ordner src/main/resources Zu verschieben, in dem die entsprechenden Ressourcen gespeichert sind, d. H. Die in der JAR-Datei enthaltenen Ressourcen (z. B. Bilder für die Symbole).

Wenn Sie die Konfigurationsdatei so einrichten möchten, dass sie mit der JAR-Datei verteilt, aber durch diese getrennt wird, müssen Sie die Datei pom.xml Bearbeiten. 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>

Darüber hinaus können Sie, wie Sie lesen können, hier auch alle Ressourcen von einem "Eingabe" -Verzeichnis in ein "Ausgabe" -Verzeichnis innerhalb von target importieren, indem Sie das entsprechende Plugin verwenden, z.

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

Der einfachste Weg, eine mir bekannte Ressource zu verwenden (zusätzliche Informationen zur Ressourcenkonfiguration finden Sie hier: 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>
25
Pavel Uvarov

Um eine absolute Kontrolle über die Ausgabe Ihres Builds zu haben, können Sie das "Apache Maven Assembly Plugin" verwenden. Sie können so ziemlich alles definieren (Format, Unterordner ...).

Das Assembly Plugin für Maven soll es Benutzern in erster Linie ermöglichen, die Projektausgabe zusammen mit ihren Abhängigkeiten, Modulen, Site-Dokumentationen und anderen Dateien in einem einzigen verteilbaren Archiv zusammenzufassen.

Mehr Infos

Sie müssen das Plugin in Ihrer POM-Datei 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 lautet der Deskriptor "yourassembly.xml" wie folgt:

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

Für das Erstellen meiner Einstellungsdateien und das Aktualisieren der Produktion funktionierte Folgendes für mich:

<build>
<resources>  
   <resource>
       <directory>${project.basedir}</directory><!-- from -->
       <targetPath>${project.build.directory}</targetPath><!-- to -->
       <includes><!-- what -->
          <include>**/*.properties</include>
       </includes>
    </resource> 
</resources>
</build>
3
leo paz