2011-06-30 53 views
2

我正在創建一個有一堆自定義屬性的maven原型。是否有其他默認的maven原型屬性

例如:

<requiredProperties> 
    <requiredProperty key="db-name"> 
    <defaultValue>Some db-name</defaultValue> 
    </requiredProperty> 
    <requiredProperty key="station-name"> 
    <defaultValue>localhost</defaultValue> 
    </requiredProperty> 
    ... 
</requiredProperties> 

當基於該原型的行家都知道一樣的groupId,artifactId的,版本一些默認的變量產生一個新的項目。 maven是否知道像env.user,user,host,path,basedir或其他任何其他微不足道的變量? 哪些? 我怎樣才能得到他們?

謝謝。

+0

米歇爾你好,請澄清你要使用的變量是什麼。原型使您可以從模板(原型)創建類似的項目,但是如果您需要使用f.e.系統屬性,它們不需要在原型的項目生成中設置。 Maven知道座標,因爲你在生成過程中輸入了座標。 – Jan

回答

0

此連結的列表內置的Maven原型屬性 - http://intellectualcramps.wordpress.com/2011/04/15/maven-archetype-creation-tips/

內置的屬性是:

  • 的groupId
  • rootArtifactId - 項目工件ID,單個模塊中與artifactId相同的項目
  • artifactId - 模塊僞跡ID
  • 版本
  • 包 - 一個基本的Java包名稱,在項目創建期間放置在src/main/java中。
+0

將相關列表正確插入答案將比提供鏈接(可能在一段時間內死亡)更好。 – jogojapan

2

我意識到這是一個老問題,但我早前就遇到過這個問題,並投了票。我想知道,我現在想出了一個解決方案/解決方法來訪問這些屬性。

我創建了我自己的Maven插件,名爲property-setter-maven-plugin,它設置System,最重要的是,執行屬性。該插件的配置允許指定任意數量的屬性和值(因爲它們在POM中定義,可以訪問所有正常變量)。然後運行原型插件(在與我的自定義插件相同的Maven執行中),它​​讀取執行屬性並找到您已配置的任何。

我Maven的命令看起來是這樣的:

mvn \ 
    com.example.build.maven:property-setter-maven-plugin:0.1:set-properties \ 
    archetype:generate \ 
    -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=... 

是在從長相產生這樣的原型相同的目錄坐在POM的配置:

... 
<plugin> 
    <groupId>com.example.build.maven</groupId> 
    <artifactId>property-setter-maven-plugin</artifactId> 
    <version>0.1</version> 
    <executions> 
     <execution> 
      <goals><goal>set-properties</goal></goals> 
      <configuration> 
       <version>${project.version}</version> 
       <userName>${user.name}</userName> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
... 

插件代碼,它可以被修改爲僅設置所有系統屬性如下:

package com.example.build.maven.mojo; 

import org.apache.maven.execution.MavenSession; 
import org.apache.maven.model.Plugin; 
import org.apache.maven.model.PluginExecution; 
import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecution; 
import org.apache.maven.plugin.MojoExecutionException; 
import org.apache.maven.plugin.MojoFailureException; 
import org.apache.maven.project.MavenProject; 
import org.codehaus.plexus.util.xml.Xpp3Dom; 

import java.util.Properties; 


/** 
* PropertySetterMojo 
* 
* @goal set-properties 
* @phase validate 
* @since 0.1 
*/ 
public class PropertySetterMojo extends AbstractMojo 
{ 
    /** 
    * @parameter default-value="${project}" 
    * @parameter required 
    * @readonly 
    */ 
    private MavenProject project; 

    /** 
    * @parameter expression="${session}" 
    * @readonly 
    */ 
    private MavenSession session; 

    /** 
    * @parameter expression="${mojoExecution}" 
    * @readonly 
    * @required 
    */ 
    protected MojoExecution execution; 


    /** 
    * 
    */ 
    @Override 
    public void execute() throws MojoExecutionException, MojoFailureException 
    { 
     try 
     { 
      Plugin plugin = execution.getPlugin(); 
      String executionId = execution.getExecutionId(); 
      PluginExecution pluginExecution = plugin.getExecutionsAsMap().get(executionId); 
      Xpp3Dom config = ((Xpp3Dom) pluginExecution.getConfiguration()); 

      Properties executionProperties = session.getExecutionProperties(); 

      for (int i = 0; i < config.getChildCount(); i++) 
      { 
       Xpp3Dom configEntry = config.getChild(i); 
       String propertyName = configEntry.getName(); 
       String propertyValue = configEntry.getValue(); 

       System.setProperty(propertyName, propertyValue); 
       executionProperties.setProperty(propertyName, propertyValue); 

       getLog().info("Set System and execution property: " + propertyName + " => " + propertyValue); 
      } 
     } 
     catch (Exception e) 
     { 
      throw new MojoExecutionException("Failed to set properties", e); 
     } 
    } 
} 
相關問題