Существуют ли другие стандартные свойства архетипа maven? - PullRequest
2 голосов
/ 30 июня 2011

Я создаю архетип maven, который имеет несколько пользовательских свойств.

ex:

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

Когда новый проект генерируется на основе этого архетипа, maven знает некоторые переменные по умолчаниюкак groupId, artifactId, версия.Знает ли maven другие тривиальные переменные, такие как env.user, user, host, path, basedir или любые другие?которые?как я могу получить их?

спасибо.

Ответы [ 3 ]

2 голосов
/ 30 августа 2012

Я понимаю, что это старый вопрос, но я столкнулся с этим вопросом раньше и проголосовал за него.Мне было интересно то же самое, теперь я нашел решение / обходной путь для обеспечения доступа к этим свойствам.

Я создал свой собственный плагин Maven с именем property-setter-maven-plugin, который устанавливает System и, что наиболее важно, выполнение свойств.Конфигурация этого плагина позволяет указывать любое количество свойств и значений (и поскольку они определены в 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);
        }
    }
}
0 голосов
/ 15 мая 2015

В дополнение к ответу Даниэля Штольца, здесь ссылка на страницу спецификации архетипа Maven: http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html

Выдержка из спецификации, выделены имена свойств:

[...]

Основные свойства, которые используются движком Velocity при создании файла проекта: groupId, artifactId, версия и пакет .

Возможноопределить дополнительные свойства, которые должны быть оценены до генерации файла.

[...]

0 голосов
/ 16 декабря 2011

Эта ссылка содержит список встроенных свойств для архетипов Maven - http://intellectualcramps.wordpress.com/2011/04/15/maven-archetype-creation-tips/

Встроенные свойства:

  • groupId
  • rootArtifactId - идентификатор артефакта проекта, в проектах с одним модулем, идентичный artifactId
  • artifactId - идентификатор артефакта модуля
  • версия
  • package - базовое имя пакета Java, которое помещается в src/ main / java при создании проекта.
...