是否有其他默认的maven原型属性

时间:2011-06-30 16:14:55

标签: maven maven-archetype

我正在创建一个拥有大量自定义属性的maven原型。

例如:

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

当基于此原型生成新项目时,maven知道一些默认变量,如groupId,artifactId,version。 maven是否知道其他微不足道的变量,如env.user,user,host,path,basedir或其他任何变量? 哪个是? 我怎么能得到它们?

感谢。

3 个答案:

答案 0 :(得分:2)

我意识到这是一个古老的问题,但我早些时候遇到过这个问题而且还投票了。我想知道同样的问题,我现在想出了一个解决方案/解决方法来启用对这些属性的访问。

我创建了自己的Maven插件,名为property-setter-maven-plugin,设置了System,最重要的是 execution 属性。此插件的配置允许指定任意数量的属性和值(因为它们在POM中定义,可以访问所有常规变量)。当然后运行archetype插件(在与我的自定义插件相同的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);
        }
    }
}

答案 1 :(得分:0)

此链接包含Maven原型的内置属性列表 - http://intellectualcramps.wordpress.com/2011/04/15/maven-archetype-creation-tips/

内置属性是:

  • 的groupId
  • rootArtifactId - 与artifactId相同的单个模块项目中的项目工件ID
  • artifactId - 模块工件ID
  • 版本
  • package - 一个基本java包名,在项目创建期间放在src / main / java中。

答案 2 :(得分:0)

除了Daniel Stolz回答,这里链接到Maven Archetype Specification页面: http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html

摘自规范,突出显示属性名称:

  

[...]

     

Velocity引擎在项目文件生成期间使用的主要属性是 groupId,artifactId,version和package

     

可以定义在生成文件之前必须重要的其他属性。

     

[...]