我意識到這是一個老問題,但我早前就遇到過這個問題,並投了票。我想知道,我現在想出了一個解決方案/解決方法來訪問這些屬性。
我創建了我自己的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);
}
}
}
米歇爾你好,請澄清你要使用的變量是什麼。原型使您可以從模板(原型)創建類似的項目,但是如果您需要使用f.e.系統屬性,它們不需要在原型的項目生成中設置。 Maven知道座標,因爲你在生成過程中輸入了座標。 – Jan