有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven在构建时包含不同的文件

我有十个WAR文件,所有这些文件都有几乎相同的代码和标记。唯一的区别在于图像、CSS和消息。我偶然想到了配置文件的概念,但我还没有完全摸索过,我不确定这是否能满足我的需要

基本上,我想要一个基础项目,为10场不同的战争提供不同的配置文件。每当使用给定的概要文件启动构建时,它都会进入存储库(本地或我所在组织的),检索CSS、图像和消息文件,并在完成该过程之前将其放置在正确的位置。我想象不出这与出去检索JAR文件并将其放入WEB-INF库有多大不同

我相信这在左外野不会太远,我想尽可能地坚持马文的最佳状态。任何帮助都将不胜感激


共 (4) 个答案

  1. # 1 楼答案

    你可以随时使用maven远程资源插件。您可以为每个资源集创建子模块构建,比如创建一个名为“my-project-resources-customer1”的构建。罐子这些就像任何其他maven工件一样,可以放在本地或远程回购中

    在您的war构建中,您将拥有如下所示的插件配置,它将把指定资源包JAR的内容分解到您的目标目录中,然后将它们包含在war文件中。此配置可以由配置文件轻松控制,这些配置文件设置属性“profilename”以选择所需的资源

    <plugin>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals>
              <goal>process</goal>
            </goals>
            <configuration>
              <resourceBundles>
                <resourceBundle>org.mygroup:my-project-resources-${profilename}:${pom.version}</resourceBundle>
              </resourceBundles>
            </configuration>
          </execution>
        </executions>
      </plugin>
    

    一个警告(很小)是,如果使用maven发布插件,请注意如何指定资源版本。如果您的资源和war文件共享一个公共版本,则需要使用插件中的${pom.version}属性。然后,当发布插件将您的父版本更新为1.1时,插件将自动反映这一点,并使用资源包的1.1版本。如果您没有与war同步发布资源包,那么明确指定版本就可以了

    ste

  2. # 3 楼答案

    是的,我两次回答这个问题,因为每种方法都有很大的不同

    而不是一个pom。如果每个war文件都有一个配置文件,那么您可以拥有一个包含11个模块的项目。一个maven模块拥有所有共享源代码,然后您的每个war文件都将是另一个相邻的模块,只有特定于它的文件。所有这些模块都在一个根pom下

    在每个war模块的pom中,您将在构建配置中设置要指向的resources和sourceDirectory/基本项目/src/main/resources和/分别是base project/src/main/java

    maven war插件配置将有webResources设置指向/将base project/src/main/webapp和特定于战争的资源添加到中/src/main/webapp

    有了这个解决方案,您的每个war文件都会有不同的maven工件,它们都可以在您的war文件中共存。m2存储库没有任何问题

  3. # 4 楼答案

    如果你想把每个项目分开,你可以给每个项目自己的pom。xml。在每个子项目pom中,为父项目添加依赖项。这将导致生成执行“覆盖”,其中来自子项目的文件被添加到(或覆盖)父项目中的文件。子项目的依赖关系示例:

    <dependency>
       <groupId>com.example.app</groupId>
       <artifactId>example</artifactId>
       <version>1.0.0</version>
       <type>war</type>
    </dependency>