gpt4 book ai didi

java - 没有配置文件的多个 src/main/resources 文件夹(我希望一次构建多个版本)

转载 作者:行者123 更新时间:2023-11-29 03:48:41 25 4
gpt4 key购买 nike

我正在尝试让我的项目自动构建一个项目的两个不同版本。我所做的是添加了两个不同的插件执行,如下所示

         <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
<configuration>
<resources>
<resource>
<directory>src/main/resources/first</directory>
</resource>
</resources>
<webappDirectory>${webappDirectory}</webappDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
<configuration>
<resources>
<resource>
<directory>src/main/resources/second</directory>
</resource>
</resources>
<webappDirectory>${project.build.directory}/deployment</webappDirectory>
</configuration>
</plugin>

它构建了两个 webappDirectories 并按预期创建了 war 文件,但是资源没有被正确包含(它似乎忽略了上面的资源定义)。

我猜是因为我在错误的阶段执行此操作,我需要在哪个阶段覆盖默认资源目录?

(请注意,我不希望有两个不同的配置文件,我想同时完成两个)

最佳答案

我写了一个blog entry exactly关于那个问题,但本质是要有具有以下结构的 maven 项目(在你的情况下是 war 模块):

.
|-- pom.xml
`-- src
|-- main
| |-- java
| |-- resources
| |-- environment
| | |-- test
| | | `-- database.properties
| | |-- qa
| | | `-- database.properties
| | `-- production
| | `-- database.properties
| `-- webapp

最重要的是通过maven-assembly-plugin 创建不同的配置。使用这样的配置:

  <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor>
</descriptors>
</configuration>
</execution>
<execution>
<id>qa</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor>
</descriptors>
</configuration>
</execution>
<execution>
<id>production</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

您还需要assembly descriptors像下面这样:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

<id>test</id>
<formats>
<format>war</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<useProjectArtifact>true</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<outputDirectory>WEB-INF</outputDirectory>
<directory>${basedir}/src/main/environment/test/</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
</fileSets>
</assembly>

当然,您必须相应地命名它们,显然您还必须更改描述符中的目录。基于此,现在可以在包周期中创建具有不同配置的多个 Artifact (在您的情况下是 war 文件)。所以你只需通过以下方式调用你的项目构建:

  mvn clean package

最后我建议不要使用 src/main/resources 文件夹,因为该文件夹应该用于生产信息,它不会因不同的配置而改变。此外,src/test/resources 将用于测试资源。

关于java - 没有配置文件的多个 src/main/resources 文件夹(我希望一次构建多个版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com