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

随风

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,并execution为每个文件定义几个,并对名称进行硬编码。

看起来像:

<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为每个文件复制该块,因此将有许多重复的代码,但差别很小。

我想知道是否有任何解决方案可以使事情变得更简单?我试图找到一种方法来循环下面的文件并对每个文件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_@[email protected]</filter>
                    </filters>
               </configuration>
          </pluginExecutor>
        </pluginExecutors>
      </configuration>
    </execution>
  </executions>
</plugin>

该文档还包含一个与您的需求非常相似示例

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何执行需要文件名的任务

来自分类Dev

如何根据文件名创建多个目录并在linux中更改文件名?

来自分类Dev

如何根据文件名和计数文件将文件移动到目录中

来自分类Dev

根据 hdfs 目录中的文件名计算文件数

来自分类Dev

如何交换目录中的文件名?

来自分类Dev

在可执行目录中打开文件名*文件名部分未知的文件

来自分类Dev

如何遍历目录并对每个单独的文件执行任务

来自分类Dev

根据文件名运行不同的任务

来自分类Dev

根据文件名解构目录结构

来自分类Dev

如何在忽略文件名中的空格的同时遍历子目录并执行操作

来自分类Dev

在Shell脚本中循环时如何获取目录和文件名

来自分类Dev

Python Pandas:为目录中的每个文件执行循环

来自分类Dev

如何遍历目录中某个文件夹中的所有csv文件名,并对这些文件名执行字符串拆分?

来自分类Dev

根据文件名将文件复制到某些目录

来自分类Dev

循环浏览目录中的文件,计算每个目录中的行数,如果少于500行则复制到新文件名

来自分类Dev

根据某些文件名模式将文件排序并移动到目录中

来自分类Dev

如何编码我的程序来为目录中的每个新文件创建新文件名?

来自分类Dev

如何根据文件名的前两个单词在每个文本文件中添加标题?

来自分类Dev

如何从文件名中删除某些字符串?

来自分类Dev

如何从目录中的所有文件名中删除“ _”

来自分类Dev

批处理文件可根据文件名中的字符复制文件并远程执行

来自分类Dev

如何根据文件名将文件名排序到文件夹中

来自分类Dev

如果文件名匹配模式,则执行某些操作(for循环,大小写语句)

来自分类Dev

如何获取目录中的所有文件名?

来自分类Dev

如何匹配不同目录中的文件名?(bash或python)

来自分类Dev

如何检查目录中是否存在文件名?

来自分类Dev

如何使用Python更改目录中的多个文件名

来自分类Dev

如何一一获取目录中的文件名?

来自分类Dev

如何识别目录中的已修改文件名?

Related 相关文章

  1. 1

    如何执行需要文件名的任务

  2. 2

    如何根据文件名创建多个目录并在linux中更改文件名?

  3. 3

    如何根据文件名和计数文件将文件移动到目录中

  4. 4

    根据 hdfs 目录中的文件名计算文件数

  5. 5

    如何交换目录中的文件名?

  6. 6

    在可执行目录中打开文件名*文件名部分未知的文件

  7. 7

    如何遍历目录并对每个单独的文件执行任务

  8. 8

    根据文件名运行不同的任务

  9. 9

    根据文件名解构目录结构

  10. 10

    如何在忽略文件名中的空格的同时遍历子目录并执行操作

  11. 11

    在Shell脚本中循环时如何获取目录和文件名

  12. 12

    Python Pandas:为目录中的每个文件执行循环

  13. 13

    如何遍历目录中某个文件夹中的所有csv文件名,并对这些文件名执行字符串拆分?

  14. 14

    根据文件名将文件复制到某些目录

  15. 15

    循环浏览目录中的文件,计算每个目录中的行数,如果少于500行则复制到新文件名

  16. 16

    根据某些文件名模式将文件排序并移动到目录中

  17. 17

    如何编码我的程序来为目录中的每个新文件创建新文件名?

  18. 18

    如何根据文件名的前两个单词在每个文本文件中添加标题?

  19. 19

    如何从文件名中删除某些字符串?

  20. 20

    如何从目录中的所有文件名中删除“ _”

  21. 21

    批处理文件可根据文件名中的字符复制文件并远程执行

  22. 22

    如何根据文件名将文件名排序到文件夹中

  23. 23

    如果文件名匹配模式,则执行某些操作(for循环,大小写语句)

  24. 24

    如何获取目录中的所有文件名?

  25. 25

    如何匹配不同目录中的文件名?(bash或python)

  26. 26

    如何检查目录中是否存在文件名?

  27. 27

    如何使用Python更改目录中的多个文件名

  28. 28

    如何一一获取目录中的文件名?

  29. 29

    如何识别目录中的已修改文件名?

热门标签

归档