我的pom.xml的scm配置如下
<scm>
<url>${my.scm.url}</url>
</scm>
我有一个属性文件,我正在使用property-maven-plugin阅读,其值为$ {my.scm.url},而且我还使用buildnumber-maven-plugin从SVN获取最新版本。
问题是buildnumber-maven-plugin抛出了无效的scm url错误但是,当我用我的svn repo的实际url替换$ {my.scm.url}时,它运行得很好。
如何在不必硬编码scm url的情况下实现成功执行?
PS:我使用:mvn clean install command
运行构建。
答案 0 :(得分:2)
问题可能是由于插件运行的顺序。以下应该有效:
public class Main {
private static final class NumAndDate {
private final int num;
private final Date date;
NumAndDate(int num, Date date) {
this.num = num;
this.date = date;
}
}
public static final class NumAndDateComparator implements Comparator<NumAndDate> {
@Override
public int compare(NumAndDate r1, NumAndDate r2) {
int value = 0;
value = r1.num - r2.num;
if (value == 0 && !isValueNull(r1.date, r2.date))
value = r1.date.compareTo(r2.date);
return value;
}
private boolean isValueNull(Date date, Date date2) {
return date == null || date2 == null;
}
}
public static void main(String[] args) {
NumAndDate[] array = {
new NumAndDate(0, new Date(0)),
new NumAndDate(0, new Date(1)),
new NumAndDate(0, null)
};
Random random = new Random();
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 10000; j++) {
List<NumAndDate> list = new ArrayList<>();
int[] arr = new int[i];
for (int k = 0; k < i; k++) {
int rand = random.nextInt(3);
arr[k] = rand;
list.add(array[rand]);
}
try {
Collections.sort(list, new NumAndDateComparator());
} catch (Exception e) {
System.out.println(arr.length + " " + Arrays.toString(arr));
return;
}
}
}
}
}
绑定到properties-maven-plugin
阶段initialize
插件buildnumber-maven-plugin
插件(默认绑定到buildnumber-maven-plugin
阶段)。 现在所有3个插件都应该以正确的顺序运行(您可以从日志中查看)。或者,您可以绑定到不同的阶段以确保它们以正确的顺序运行,但上述应该足够并且符合initialize
phase的目标(初始化构建状态,例如设置属性或创建目录)。
答案 1 :(得分:0)
因为你没有发布POM文件,我猜了一下。
显然,顺序很重要,你必须首先加载属性。也就是说,看mojo,我不确定设置属性是否等同于基本上设置-D。
如果您执行了mvn -Dscm.url = clean install,则该值将存在,因为它被定义为mvn JVM。根据$ {scm.url}的评估点,如果它在属性mojo有机会运行之前,那就太晚了。
如果使用可以在 mvn调用之前加载属性的CI工具(即Jenkins,Hudson),则定义该变量。
我已经为构建使用了buildNumber mojo,因为我为自己的快照工件自动生成了buildNumbers。事情顺序发生了:
我还想在maven中加载属性文件并让它“动态”更新工件ID,但到那时,Maven已经评估过;因此,我必须事先做好。
希望这有帮助。