使用不同的编码过滤资源

时间:2015-05-04 14:06:14

标签: maven encoding

我有一个maven项目。在/src/main/resources/我有两个文件foo.propertiesbar.xml。第一个用ISO-8859-1编码,第二个用UTF-8编码。

是否有一种简单的方法可以在不破坏编码的情况下对两个文件进行过滤?

据我所知,我无法在<resource>块中指定编码。似乎只能为插件本身指定编码,但这会导致两个文件都使用相同的编码进行过滤。

理想情况下,我想指定类似的内容:

  • *。properties - &gt;过滤器使用ISO-8859-1
  • *。xml - &gt;过滤器使用UTF-8
  • *。pdf - &gt;不要过滤
  • 其他 - &gt;使用默认编码过滤

这不是一种非常不寻常的情况,是否有一种简单的方法来配置它?

2 个答案:

答案 0 :(得分:1)

首先,我建议将基于iso的资源放入不同的目录,如src/main/iso-resources,并使用类似的内容:

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

  <name>Resource Test</name>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <configuration>
            <nonFilteredFileExtensions>
              <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-iso-part</id>
            <goals><goal>copy-resources</goal></goals>
            <phase>process-resources</phase>
            <configuration>
              <encoding>ISO-8859-1</encoding>
              <resources>
                <resource>
                  <directory>src/main/iso-resources/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

答案 1 :(得分:0)

如果您不想将资源保存在单独的目录中,也可以将它们保存在默认目录src/main/resources中,并使用排除项。 这个想法是:

    应该使用nonFilteredFileExtensions 将不应过滤的
  • 文件扩展名添加到默认配置中
  • 使用默认编码让资源插件进程资源的默认执行情况
  • build/resources配置中排除不使用此编码的文件
  • 对于您要处理的每种其他编码,添加带有显式includes仅选择目标文件的目标“ copy-resources”的执行

此示例仅处理.properties,但您可以轻松地概括一下:

<resources>
     <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>application*.properties</exclude>
        </excludes>
        <filtering>true</filtering>
    </resource>
 </resources>

...

   <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
            <nonFilteredFileExtensions>
                  <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
        </configuration>
        <executions>
            <execution>
                <id>properties</id>
                <phase>process-resources</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <encoding>ISO-8859-1</encoding>
                    <resources>
                        <resource>
                            <directory>src/main/resources</directory>
                            <filtering>true</filtering>
                            <includes>
                                <include>application*.properties</include>
                            </includes>
                        </resource>
                    </resources>
                    <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>