2016-07-12 12 views
1

Ich hatte eine deploy.ant Datei, in der der gesamte Build-Prozess wurde, einschließlich Kopieren von Dateien, Ausführen des Protobuf-Compiler und all das getan. Jetzt, wo ich auf Maven umschalte, habe ich pom.xml Dateien, die diese Aufgaben erledigen sollen. Ich bin fast alles erledigt, außer dem deploy.ant Skript, das mir geblieben ist.Running Ant Aufgabe auf Maven: Kopieren, Löschen von Dateien innerhalb der Projekte

Dieses Skript enthält das Bereinigen, Vorbereiten, Erstellen und Bereitstellen von Zielen. Was ich von hier brauche, ist Reinigung, Vorbereitung und nur ein Teil des Bauziels, weil die anderen Teile von den anderen pom.xml s getan werden.

Also in meinem deploy.ant Ich habe den folgenden Code-Schnipsel:

<!-- just copying sh and ant files to release folder. --> 
    <target name="clean"> 
     <delete dir="${install.dir}" /> 
    </target> 

    <target name="prepare"> 
     <mkdir dir="${install.dir}" /> 
     <copy file="${template.dir}/run.all.ant" todir="${install.dir}" /> 
     <copy file="${template.dir}/run.all.sh" todir="${install.dir}" /> 
     <copy file="${template.dir}/kill.all.sh" todir="${install.dir}" /> 
     <copy file="${template.dir}/packLogs.sh" todir="${install.dir}" /> 
    </target> 
    . 
    . 
    . 
    . 
<!-- copy template files and configurations --> 
     <if> 
      <available file="${component.project.dir}/conf/config.properties" /> 
      <then> 
       <copy file="${component.project.dir}/conf/config.properties" todir="${component.release.dir}/conf" /> 
      </then> 
      <else> 
       <echo message="${component.project.dir} does not provide a bundle config - using default from release bundle" /> 
       <copy file="${template.dir}/config.properties" todir="${component.release.dir}/conf" /> 
      </else> 
     </if> 
     <if> 
      <available file="${component.project.dir}/plans" type="dir" /> 
      <then> 
       <copy todir="${component.release.dir}/plans"> 
        <fileset dir="${component.project.dir}/plans" includes="**" /> 
       </copy> 
      </then> 
     </if> 
     . 
     . 
      <copy file="../group1/someProject.mw/conf/log4j.xml" todir="${component.release.dir}/conf" /> 
      <copy file="${template.dir}/run.ant" todir="${component.release.dir}" /> 
      <copy file="${template.dir}/run.sh" todir="${component.release.dir}" /> 

und dies ist der Maven Teil bin ich gekommen oben mit:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <echo>Copying .sh and .ant files to release folder</echo> 
        <basename file="${component.project.dir}" property="component.name" /> 
        <property name="component.release.dir" value="${install.dir}/${component.name}" /> 
        <delete dir="${install.dir}" /> 
        <mkdir dir="${install.dir}" /> 
        <copy file="${template.dir}/run.all.ant" todir="${install.dir}" /> 
        <copy file="${template.dir}/run.all.sh" todir="${install.dir}" /> 
        <copy file="${template.dir}/kill.all.sh" todir="${install.dir}" /> 
        <copy file="${template.dir}/packLogs.sh" todir="${install.dir}" /> 
        <copy file="../group1/someProject.mw/conf/log4j.xml" todir="${component.release.dir}/conf" /> 
        <copy file="${template.dir}/run.ant" todir="${component.release.dir}" /> 
        <copy file="${template.dir}/run.sh" todir="${component.release.dir}" /> 
        </tasks> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

Aber wie man sehen kann ich ganz bin verwirrt mit all diesen Wegen und wie man sie in Maven integriert. Ich vermute, dass der Code, den ich geteilt habe, korrekt ist, da Maven keine Ahnung hätte, was die "${install.dir}" ist.

Also meine Frage ist, wie solche Aufgaben in maven mit diesem Plugin zu integrieren? Ist es einfach, die Ameisenschnipsel in die Tags des Plugins zu kopieren? Wenn ja, wie wird es jemals verstehen, was mit den Ameiseneigenschaften gemeint ist? Wege?

Antwort

2

Es scheint, dass Sie versuchen, einige Dateien zu einem sinnvollen Paket zusammenzustellen, das als Verzeichnis verfügbar ist.

Offensichtlich gibt es ein Maven-Plugin dafür: maven-assembly-plugin.

Ihr Ziel zu erreichen, werden Sie zuerst, dass die Plug-in Ihrem pom verweisen müssen:

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
     <execution> 
      <id>make-install-assembly</id> 
      <phase>package</phase> 
      <goals> 
      <goal>single</goal> 
      </goals> 
      <inherited>true</inherited> 
      <configuration> 
      <descriptors> 
       <descriptor>src/main/assemblies/install.xml</descriptor> 
      </descriptors> 
      <appendAssemblyId>false</appendAssemblyId> 
      <attach>true</attach> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

Dann werden Sie natürlich die install.xml Baugruppendatei erstellen müssen, um assembly schema entsprechen.

So etwas sollte den Trick

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>install</id> 
    <formats> 
     <format>dir</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>${template.dir}</directory> 
      <outputDirectory>${install.dir}</outputDirectory> 
      <lineEnding>unix</lineEnding> 
      <filtered>true</filtered> 
      <includes> 
       <include>run.all.ant</include> 
       <include>run.all.sh</include> 
      </includes> 
      <excludes> 
       <exclude>META-INF/**</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Nun tut, ist diese Anordnung nicht vollständig, aber ich denke, Sie auf die Idee verstehen werden.

+0

Der Build-Prozess soll mit anderen Mitteln durchgeführt werden, was ich will, ist einfach kopieren/Einfügen von Dateien in relevante Projektordner. Brauche ich noch dieses "Assembly" -Plugin? –

+0

In der Tat wird es die Art, wie Ihr Distributionsordner erstellt wird, von dem Moment an trennen, in dem es aufgerufen wird. Wenn ich Maven verwende, finde ich es oft besser als maven-ant-plugin. Also, ja, du wirst es brauchen, nur um deinen Build zu klären. – Riduidel

+0

Es gibt einige Probleme dabei. Zuerst muss ich es nur durch 'install' Phase laufen lassen, ist das möglich? Kann das auch bei sonst-Bedingung funktionieren? –