gpt4 book ai didi

java - 根据输入参数有选择地复制 Maven 中的资源?

转载 作者:行者123 更新时间:2023-12-02 00:19:55 24 4
gpt4 key购买 nike

我正在将应用程序从 Ant 迁移到 Maven。该应用程序可以部署到两种环境中。一种配置称为 Local,另一种配置称为 dev,因此自然有两个 ant 目标。每个 ant 目标都会从两个不同的文件夹复制资源,并将其作为最终 war 文件的一部分。

我如何在 Maven 中模仿这种行为?我正在考虑在构建时传递一个参数,基于这个参数,我们可以使用maven资源插件来复制相应的文件夹。像这样的东西。

<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>${local}/**</exclude>
</excludes>
</resource>
</resources>

我走的路正确吗?如果是,如何在运行时替换“本地”?另外,我正在做补充操作,如果我们想为开发构建,那么我会排除本地,反之亦然。有没有更好的方法来处理这个问题?

此外,如果我使用此方法,目标 war 会将整个文件夹复制到其中。我如何配置maven只复制文件夹内容而不是整个文件夹。

最佳答案

复制资源时,Maven 会将包含/排除模式应用于 <directory>定义值,并维护从该目录开始的路径结构。没有任何与 ant 的 flattenmapper 等效的东西我已经找到了。

对于其余的,请考虑 Maven build profiles 。您定义包含要在构建时更改的配置的配置文件,然后从命令行激活正确的配置文件。使用如下所示的配置,命令

mvn -Dtarget.env=local process-resources

将从 /src/main/resources/local 复制文件进入target/classes 。由于“本地”包含在资源的 directory 中元素,它不会出现在复制资源的路径中。

<profiles>
<profile>
<id>local</id>
<activation>
<property>
<name>target.env</name>
<value>local</value>
</property>
</activation>
<properties>
<resource.dir>local</resource.dir>
</properties>
</profile>

<!-- add a similar profile for dev -->
</profiles>

<resources>
<resource>
<directory>src/main/resources/${resource.dir}</directory>
<filtering>true</filtering>
</resource>
</resources>

您可以使用我在这里展示的配置文件做更多的事情。我希望这可以帮助您入门,即使它不能解决您的整个用例。

关于java - 根据输入参数有选择地复制 Maven 中的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233038/

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