我正在使用maven-assembly-plugin来构建一个带有依赖项的可执行的单片jar。我还使用资源过滤来设置一些自定义,特定于通道(dev,stage,prod等)的属性。
如何使jar的finalName包含通道名称(dev,stage,prod等)?
我希望以下mvn命令可以生成看起来像这样的jar:
在某处我找不到maven属性吗?我想尽可能避免使用冗余命令行参数(即 - 'mvn clean install -P DEV -Dlane = DEV')。
这是我的程序集插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>ws-client</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>Example</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
答案 0 :(得分:9)
与Bhaskar类似,但略有修改。
&lt; build&gt;之后标签,添加
<finalName>${project.artifactId}-${lane}</finalName>
您可以将通道值设置为配置文件中的属性。
<profiles>
<profile>
<id>DEV</id>
<properties>
<lane>DEV</lane>
</properties>
</profile>
</profiles>
然后像你说的那样执行构建: mvn ... -P DEV(例如mvn clean install -P DEV)
答案 1 :(得分:2)
&lt; build&gt;之后标签,添加
<finalName>${project.artifactId}-${lane}</finalName>
并将“lane”env变量设置为配置文件名称,例如
mvn -P DEV -Dlane = DEV等。
或者您可以更具创意,并发现此处所述的有效个人资料ID Maven - Can I reference profile id in profile definition?
编辑------
如果你想避免多余的论点。
为什么不使用env触发相应的配置文件。属性。
所以在命令行
mvn -Dlane=DEV|STAGE|PROD
并在pom中
<profile>
<id>DEV</id>
<activation>
<property>
<name>lane</name>
<value>DEV</value>
</property>
</activation>
<build>
// rest of the profile
</profile>
对于STAGE和PROD配置文件也一样。