gpt4 book ai didi

maven - 如何循环目录中的文件,并根据每个文件名执行一些任务?

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

我的项目中有一个 properties 目录:

properties
- project_dev.properties
- project_test.properties
- project_prod.properties
- project_other.properties

它为不同的环境定义了一些不同的值。并且还有一个 template 目录,其中包含一些带有占位符的配置文件模板。

我想要做的是循环properties中的所有文件,并将每个文件组合到template目录中,生成最终的配置文件,这些文件位于不同的目录下基于文件名的目录。

所以会是:

target
- configurations
- dev
- ... some files
- test
- ... some files
- prod
- ... some files
- other
- ... some files

我现在要做的是使用maven-resources-plugin,并为每个文件定义几个执行,并硬编码名称.

看起来像:

<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<!--- for dev ---->
<execution>
<id>dev-filter</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>${basedir}/target/conf/dev</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<resources>
<resource>
<directory>${basedir}/conf/template</directory>
<filtering>true</filtering>
<includes>
<include>channel/*</include>
<include>rule-config/*</include>
<include>server/*.properties</include>
</includes>
</resource>
</resources>
<delimiters>
<delimiter>${*}</delimiter>
</delimiters>
<filters>
<filter>${basedir}/properties/project_dev.properties</filter>
</filters>
</configuration>
</execution>
<!--- for prod ---->
<execution>
<id>prod-filter</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>${basedir}/target/conf/prod</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<resources>
<resource>
<directory>${basedir}/conf/template</directory>
<filtering>true</filtering>
<includes>
<include>channel/*</include>
<include>rule-config/*</include>
<include>server/*.properties</include>
</includes>
</resource>
</resources>
<delimiters>
<delimiter>${*}</delimiter>
</delimiters>
<filters>
<filter>${basedir}/properties/project_prod.properties</filter>
</filters>
</configuration>
</execution>
<!--- for test --->
...

您可以看到我正在复制每个文件的execution block ,因此会有许多重复的代码,但差异很小。

我想知道有什么解决方案可以让事情变得更简单吗?我尝试找到一种方法来循环 properties 下的文件并为每个文件执行 filter 任务,但不知道如何执行。

最佳答案

用于此类目的的一个简单解决方案是 Iterator-maven-plugin

<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>iterator-maven-plugin</artifactId>
<version>0.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>executor</goal>
</goals>
<configuration>
<items>
<item>dev</item>
<item>test</item>
<item>prod</item>
</items>

<pluginExecutors>
<pluginExecutor>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
<goal>copy-resources</goal>
<configuration>
<outputDirectory>${basedir}/target/conf/@item@</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<resources>
<resource>
<directory>${basedir}/conf/template</directory>
<filtering>true</filtering>
<includes>
<include>channel/*</include>
<include>rule-config/*</include>
<include>server/*.properties</include>
</includes>
</resource>
</resources>
<delimiters>
<delimiter>${*}</delimiter>
</delimiters>
<filters>
<filter>${basedir}/properties/project_@item@.properties</filter>
</filters>
</configuration>
</pluginExecutor>
</pluginExecutors>
</configuration>
</execution>
</executions>
</plugin>

该文档还包含 example这与您的需求非常相似。

除此之外,我建议在您的 pom 文件中使用以下属性:

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

您不需要单独为 maven-resources-plugin 定义编码。

关于maven - 如何循环目录中的文件,并根据每个文件名执行一些任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118028/

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