我需要在maven pom.xml文件中设置一个属性,该文件应该是UUID。任何人都可以告诉我
将属性设置为UUID的最佳方法是什么?
我正在使用启动gigaspaces和gigaspaces的配置文件需要组名,我
想要独一无二(uuid)。所以,在我的个人资料中,我想设置一个groupName属性值
应该针对每个版本进行更改。我自己写了一个UUIDGenerator插件,因为我没有找到任何插件。
所以,我在寻找如何实现这一目标?写插件是更好的选择还是有
更容易的选择。
谢谢,
谢加
答案 0 :(得分:9)
Arian的solution(实施maven插件)是IMO实现您的要求的一种干净方式(并为他的答案+1)。
但如果您不打算在其他地方重复使用插件,那么快速替代方法就是使用GMavenPlus plugin破解pom。下面是一个示例,说明如何使用库中的Java类生成一些uuid并将其设置为属性:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q3984794</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.safehaus.jug</groupId>
<artifactId>jug</artifactId>
<version>2.0.0</version>
<!-- the classifer is important!! -->
<classifier>lgpl</classifier>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>set-custom-property</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<classpath>
<element>
<groupId>org.safehaus.jug</groupId>
<artifactId>jug</artifactId>
<classifier>lgpl</classifier>
</element>
</classpath>
<source>
import org.safehaus.uuid.UUIDGenerator
def uuid = UUIDGenerator.getInstance().generateRandomBasedUUID()
project.properties.setProperty('groupName', uuid.toString())
</source>
</configuration>
</execution>
<execution>
<id>show-custom-property</id>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def props = project.properties
props.each {key, value -> println key + "=" + value}
</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
将插件绑定到gigaspaces之前的阶段。
第二次执行仅用于演示目的(显示属性):
$ mvn generate-resources [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Q3984794 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q3984794 --- [INFO] [INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q3984794 --- downloadSources=true downloadJavadocs=true project.reporting.outputEncoding=UTF-8 project.build.sourceEncoding=UTF-8 groupName=814ff1a5-a102-426e-875c-3c40bd85b737 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ...
答案 1 :(得分:7)
首先,如果你的设置需要一个叫做“组名”的东西,你可能应该提供一个有意义的值。如果它必须是唯一的,您可以附加一些生成的字符,例如“MyApplication-10937410”。另外,在我看来,使用UUID就像使用大锤来破解螺母一样。但这与你的实际问题无关,所以这是我提出的解决方案:
如果您还没有这样做,请创建一个maven插件(这是一个原型)。添加此依赖项:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
</dependency>
这就是你的MOJO应该是这样的:
/**
* Goal which generates a group name.
*
* @goal generate
* @phase initialize
*/
public class GroupNameGeneratorMojo extends AbstractMojo {
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
@Override
public void execute() throws MojoExecutionException {
String groupName = ... ;
project.getProperties().setProperty("uniqueGroupName", groupName);
}
}
在您的实际项目中,请在需要时使用${uniqueGroupName}
并按照这样配置您的插件
<build>
<plugins>
<plugin>
<groupId>the.plugin.groupid</groupId>
<artifactId>groupNameGenerator</artifactId>
<executions>
<execution>
<goals><goal>generate</goal></goals>
</execution>
</executions>
<plugin>
答案 2 :(得分:0)
有https://github.com/stevespringett/maven-uuid-generator公开了用于构建的uuid为${project.build.uuid}
。您可以像
<plugins>
<plugin>
<groupId>us.springett</groupId>
<artifactId>maven-uuid-generator</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>