Я понимаю, что это старый вопрос, но я столкнулся с этим вопросом раньше и проголосовал за него.Мне было интересно то же самое, теперь я нашел решение / обходной путь для обеспечения доступа к этим свойствам.
Я создал свой собственный плагин 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);
}
}
}