2015-08-28 2 views
-1

Мне нужно сохранить текстовый файл как артефакт в папке jenkins и взять собственный apache образца кода.Как сохранить файл через Mojo от Maven?

код плагина:

package sample.plugin; 

/* 
* Copyright 2001-2005 The Apache Software Foundation. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecutionException; 

import org.apache.maven.plugins.annotations.LifecyclePhase; 
import org.apache.maven.plugins.annotations.Mojo; 
import org.apache.maven.plugins.annotations.Parameter; 
import org.apache.maven.plugins.annotations.ResolutionScope; 

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

/** 
* Goal which touches a timestamp file. 
* 
* 
*/ 
@Mojo(name = "touch", defaultPhase = LifecyclePhase.PROCESS_SOURCES) 
public class MyMojo 
    extends AbstractMojo 
{ 
    /** 
    * Location of the file. 
    */ 
    @Parameter(defaultValue = "${project.build.directory}", property = "outputDirectory", required = true) 
    private File outputDirectory; 

    public void execute() 
     throws MojoExecutionException 
    { 
     getLog().info("Mensagem de Log - Ricardo!!!"); 
     File f = outputDirectory; 

     if (!f.exists()) 
     { 
      f.mkdirs(); 
     } 

     File touch = new File(f, "touch.txt"); 

     FileWriter w = null; 
     try 
     { 
      w = new FileWriter(touch); 

      w.write("touch.txt"); 
     } 
     catch (IOException e) 
     { 
      throw new MojoExecutionException("Error creating file " + touch, e); 
     } 
     finally 
     { 
      if (w != null) 
      { 
       try 
       { 
        w.close(); 
       } 
       catch (IOException e) 
       { 
        // ignore 
       } 
      } 
     } 
    } 
} 

плагин pom.xml файл:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>sample.plugin</groupId> 
    <artifactId>hello-maven-plugin</artifactId> 
    <version>1.1.1</version> 
    <packaging>maven-plugin</packaging> 

    <name>hello-maven-plugin Maven Plugin</name> 

    <!-- FIXME change it to the project's website --> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven</groupId> 
      <artifactId>maven-plugin-api</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.maven.plugin-tools</groupId> 
      <artifactId>maven-plugin-annotations</artifactId> 
      <version>3.2</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.plexus</groupId> 
      <artifactId>plexus-utils</artifactId> 
      <version>3.0.8</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-plugin-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <goalPrefix>hello-maven-plugin</goalPrefix> 
        <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
       </configuration> 
       <executions> 
        <execution> 
         <id>default-descriptor</id> 
         <goals> 
          <goal>descriptor</goal> 
         </goals> 
         <phase>process-classes</phase> 
        </execution> 
        <execution> 
         <id>help-descriptor</id> 
         <goals> 
          <goal>helpmojo</goal> 
         </goals> 
         <phase>process-classes</phase> 
        </execution> 
       </executions> 
      </plugin>   

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 

     <pluginManagement> 
      <plugins> 
       <!--This plugin's configuration is used to store Eclipse m2e settings 
        only. It has no influence on the Maven build itself. --> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId> 
              org.apache.maven.plugins 
             </groupId> 
             <artifactId> 
              maven-plugin-plugin 
             </artifactId> 
             <versionRange> 
              [3.2,) 
             </versionRange> 
             <goals> 
              <goal>helpmojo</goal> 
              <goal>descriptor</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore></ignore> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

    <profiles> 
     <profile> 
      <id>run-its</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-invoker-plugin</artifactId> 
         <version>1.7</version> 
         <configuration> 
          <debug>true</debug> 
          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> 
          <pomIncludes> 
           <pomInclude>*/pom.xml</pomInclude> 
          </pomIncludes> 
          <postBuildHookScript>verify</postBuildHookScript> 
          <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath> 
          <settingsFile>src/it/settings.xml</settingsFile> 
          <goals> 
           <goal>clean</goal> 
           <goal>test-compile</goal> 
          </goals> 
         </configuration> 
         <executions> 
          <execution> 
           <id>integration-test</id> 
           <goals> 
            <goal>install</goal> 
            <goal>integration-test</goal> 
            <goal>verify</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 

</project> 

pom.xml файл тестового проекта, который использует плагин:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>exemplo.utilizacao.plugin.maven</groupId> 
    <artifactId>teste</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>teste</name> 
    <description>teste</description> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven</groupId> 
      <artifactId>maven-plugin-api</artifactId> 
      <version>2.0</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>sample.plugin</groupId> 
       <artifactId>hello-maven-plugin</artifactId> 
       <version>1.1.1</version> 
       <configuration> 
        <outputDir>${project.basedir}</outputDir> <!-- this will create touch.txt at the root of the project -->     
       </configuration> 
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>touch</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <pluginManagement> 
      <plugins> 
       <!--This plugin's configuration is used to store Eclipse m2e settings 
        only. It has no influence on the Maven build itself. --> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>sample.plugin</groupId> 
             <artifactId> 
              hello-maven-plugin 
             </artifactId> 
             <versionRange> 
              [1.0-SNAPSHOT,) 
             </versionRange> 
             <goals> 
              <goal>sayhi</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore></ignore> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 

каталог Jenkins управляемый переменными среды, которые должны сохранять текстовый файл:

jenkins_home/jobs/myapp/builds/build_number/myapp$myapp/archive/myapp/directory 

Мой файл touch.txt из моего плагина был сохранен в корне целевой папки моего проекта, и я хочу сохранить его в каталоге jenkins, указанном выше.

Как сделать, чтобы сохранить текстовый файл в папке jenkins правильно? Должен ли я указать путь в файле pom.xml из моего тестового проекта?

+2

Я не могу говорить за других, но я не вижу в вашем вопросе, какова ваша фактическая проблема. Вы проводите много времени, показывая, что у вас есть, и очень мало времени, объясняя, в чем проблема. – Gimby

+0

Привет, Гимби, спасибо за ваш совет, я буду более осторожен. Фактически файл touch.txt из моего плагина был сохранен в корне целевой папки моего тестового проекта, и я хочу сохранить его в каталоге jenkins, указанном выше. – ricardoramos

ответ

0

Звучит так, как будто ваш плагин ведет себя так, как ожидалось, выводя в целевой каталог. Это прекрасно, даже желательно.

Возможно, ваш вопрос должен быть; Как я могу заставить Jenkins скопировать файл из целевого каталога артефактов в место, где я хочу его установить? Это можно сделать как шаг сборки, но на меня лучше ответить кто-то другой, чем я.

Смежные вопросы