2016-07-12 7 views
1

У меня был файл deploy.ant, в котором был выполнен весь процесс сборки, включая копирование файлов, выполнение компилятора protobuf и все такое. Теперь, когда я переключаюсь на maven, у меня есть файлы pom.xml, которые должны выполнять эти задачи. Я сделал почти все, кроме сценария deploy.ant, с которым я остался.Запуск задачи Ant на maven: копирование, удаление файлов в проектах

Этот сценарий имеет очистку, подготовку, создание и развертывание целей. Мне здесь нужно очистить, подготовить и только часть цели здания, потому что другие части сделаны другим pom.xml s.

Так в моем deploy.ant я следующие фрагменты кода:

<!-- 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}" /> 

и это Maven часть я придумал:

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

Но как вы можете видеть, что я довольно путают со всеми этими путями и как их интегрировать в maven. Я подозреваю, что код, который я поделил, верен, так как maven не знал бы, что такое "${install.dir}".

Итак, мой вопрос: как интегрировать такие задачи в maven с помощью этого плагина? Является ли это просто копирование фрагментов муравьев в теги плагина? Если да, то как он когда-либо поймет, что подразумевается под муравьиными свойствами; пути?

ответ

2

Кажется, вы пытаетесь собрать некоторые файлы в полноценный пакет, доступный как каталог.

Очевидно, что для этого есть плагин maven: maven-assembly-plugin.

Для достижения своей цели, вы сначала должны ссылаться на этот плагин в вашем ПОМ:

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

Тогда вы, очевидно, нужно создать файл сборки install.xml, в соответствии с assembly schema.

Нечто подобное необходимо сделать трюк

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

Ну, эта сборка не является полным, но я думаю, вы поймете идею.

+0

Процесс сборки предполагается делать другими способами, я хочу просто скопировать/вставить файлы в соответствующие папки проекта. Мне все еще нужен этот «сборный» плагин? –

+0

Фактически, он будет разделять способ создания вашей папки распространения с момента ее вызова. При использовании maven я часто считаю, что это лучше, чем использование maven-ant-plugin. Итак, да, вам это понадобится, просто чтобы прояснить вашу сборку. – Riduidel

+0

Есть некоторые проблемы. Во-первых, мне нужно, чтобы он работал только через фазу «install», возможно ли это? Кроме того, может ли это обработать условие if-else? –