我是Maven的新手。如果这是一个愚蠢的问题,我道歉。我有一个带有pom文件的Maven Eclipse项目,该文件使用shade插件创建一个可运行的jar。我的计划是在构建中包含一个的几个属性文件(如果我的术语不正确,请纠正我。我真的很绿)。我有多个属性文件位于src / main / resources。
我想找到一种方法在runnable jar中只包含适用的属性文件。具体来说,我的项目中有两个属性文件(config1.properties,config2.properties),每个构建只使用其中一个文件,具体取决于生成的jar的所需功能。属性文件将被重新分配一个通用名称,特别是“defaultconfig.properties”,以便它可以很好地与代码一起使用。
生成的jar文件(每个不同属性文件的不同文件)将作为单独的cron作业运行。我想我将使用不同的Jenkins项目根据属性文件配置项目的任务将可运行的jar部署到特定的服务器(我想我已经得到了这个部分)。 cron作业将在这些服务器上运行。
我的问题是:
1)逻辑在哪里确定要在runnable jar中包含哪些属性文件?
例如,假设我有config1.properties(指定使用var1 = blah和var2 = blip和var3 = boink)和config2.properties(指定使用var1 = duh var2 = dip和var3 = doink)。 我在哪里告诉Maven这两个文件中的哪一个用于特定版本?
2)我应该传入一个参数,告诉Maven使用哪个属性文件?如果是这样,我也会传递这个参数?这是可以在Jenkins项目中配置的吗? (即使只是一些基本的阅读会在这里帮助我,因为我不确定这是一个maven问题还是jenkins问题。我两个都是绿色的。)
以下是我的pom.xml文件的相关部分:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.foo.dashboard.bar.Runner</mainClass>
</transformer>
</transformers>
<finalName>FooBar</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我尝试使用IncludeResourceTransformer重命名属性文件,但不确定如何根据所需的jar文件功能包含切换属性文件的逻辑。
谢谢。
答案 0 :(得分:1)
这就是我想出的。我很想知道其他方法或最好的方法来做到这一点。对所有这一切都是全新的。
<id>
值。<execution>
可以配置不同。要重命名您包含的资源,请使用<transfomer>
implementation = implementation =“org.apache.maven.plugins.shade.resource.IncludeResourceTransformer”&gt;。<transformer>
implementation =“org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer”&gt;。这比必要性更精确。为什么要在你的jar中捆绑不需要的文件?<execution>
具有不同的<finalName>
,以便生成的jar不会相互覆盖。 这是我的pom文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>ID1</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.foo.dashboard.bar.Runner</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>defaultconfig.properties</resource>
<file>src/main/resources/defaultconfig_1.properties</file>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>defaultconfig_2.properties</resource>
</transformer>
</transformers>
<finalName>FooBar1</finalName>
</configuration>
</execution>
<execution>
<id>ID2</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.foo.dashboard.bar.Runner</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>defaultconfig.properties</resource>
<file>src/main/resources/defaultconfig_2.properties</file>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>defaultconfig_1.properties</resource>
</transformer>
</transformers>
<finalName>FooBar2</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我知道这不是最终的答案,因为这个设置产生了多个jar文件,我最初在寻找的解决方案只能给我一个与特定属性文件关联的jar文件,而不是所有的jar文件属性文件。
所以我仍在提出如何改进此解决方案的建议,以便构建只会产生一个jar。