我正在尝试打印正在运行Maven项目构建的当前配置文件。
我使用maven-antrun-plugin
在控制台上打印消息,并结合引用当前配置文件的属性。
我尝试过以下属性:
${project.activeProfiles[0].id}
${project.profiles[0].id}
但是在这两种情况下都会打印"字符串"因为它是在不解析变量的情况下编写的。
这是我的测试:
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>current active profile: ${project.activeProfiles[0].id}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
但这是我获得的结果:
main:
[echo] current active profile: ${project.activeProfiles[0].id}
任何建议都将受到赞赏。
感谢。
答案 0 :(得分:6)
maven-help-plugin提供您所需要的功能。它有一个active-profiles目标。
您可以将其添加到您的pom中,甚至可以从命令行调用它(将其包含在您的maven构建调用中)。 如何判断哪些配置文件在构建过程中有效?部分将显示Maven profile introduction page。简而言之:
mvn help:active-profiles
由于这对你不起作用(见评论),这是另一种解决方案:
我认为活动配置文件(可以有多个!)不会传播为available variables - 但属性是。
因此,在配置文件部分设置自定义属性并使用它,如
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<myProfile>default</myProfile>
</properties>
</profile>
<profile>
<id>debug</id>
<activation>
<property>
<name>debug</name>
</property>
</activation>
<properties>
<myProfile>debug</myProfile>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>current active profile: ${myProfile}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 1 :(得分:0)
您可以在pom中添加maven-help-plugin以始终显示活动配置文件
import java.util.*;
public class Main {
public static void main(String args[]) {
double moduloNumber = (Math.pow(10,9)+7);
Scanner sc= new Scanner(System.in);
System.out.print("Enter the Number of Test Cases (1 <= T <= 20): ");
int T=sc.nextInt();
for(int ctr=0;ctr<T;ctr++)
{
System.out.print("\nEnter the Number of Soldiers (1 <= N <= 200000): ");
int N=sc.nextInt();
long [] x= new long[N];
long [] b= new long[N];
for(int i=0;i<N;i++)
{
System.out.print("Enter the Position of Soldier " + (i+1) + " (1 <= X[i] <= 1000000000): ");
x[i]=sc.nextLong();
}
for(int i=0;i<N;i++)
{
System.out.print("Enter the Number of Bombs with Soldier " + (i+1) + " (1 <= B[i] <= 10000): ");
b[i]=sc.nextInt();
}
int cost=0;
double v;
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
v=(x[i]-x[j]);
v=Math.abs(v)%(moduloNumber);
cost+= v*Math.max(b[i],b[j]);
}
}
System.out.println(cost);
}
}
}