繁体   English   中英

为Runnable Jars使用不同的属性文件,Maven Eclipse

[英]Using Different Properties Files for Runnable Jars, Maven Eclipse

我是Maven的新手。 如果这是一个愚蠢的问题,我道歉。 我有一个带有pom文件的Maven Eclipse项目,该文件使用shade插件创建一个可运行的jar。 我的计划是包括在建几个属性文件一个 (请纠正我,如果我的术语不正确。我真的是绿色的)。 我有多个属性文件位于src / main / resources中。

我想找到一种方法在runnable jar中只包含适用的属性文件。 具体来说,我的项目中有两个属性文件(config1.properties,config2.properties),每个构建只使用其中一个文件,具体取决于生成的jar的所需功能。 属性文件将被重新分配一个通用名称,特别是“defaultconfig.properties”,以便它可以很好地与代码一起使用。

生成的jar文件(每个不同属性文件的不同文件)将作为单独的cron作业运行。 我想我将使用不同的Jenkins项目根据属性文件配置项目的任务将可运行的jar部署到特定的服务器(我想我已经得到了这个部分)。 cron作业将在这些服务器上运行。

我的问题是:

1)逻辑在哪里确定哪些属性文件包含在可运行的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文件功能包含切换属性文件的逻辑。

谢谢。

这就是我提出的。 我很想知道其他方法或最好的方法来做到这一点。 对这一切都是全新的。

  1. 在同一个插件中创建单独的执行。 注意:必须为它们分配不同的<id>值。
  2. 每个<execution>可以配置不同。 要重命名您包含的资源,请使用<transfomer> implementation = implementation =“org.apache.maven.plugins.shade.resource.IncludeResourceTransformer”>。
  3. 要排除不需要的资源(在我的情况下,其他属性文件),请使用<transformer> implementation =“org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer”>。 这比必要性更精确。 为什么要在你的jar中捆绑不需要的文件?
  4. 确保每个<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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM