【问题标题】:Maven project and the files with unicode characters in the namesMaven 项目和名称中带有 unicode 字符的文件
【发布时间】:2017-06-02 19:13:30
【问题描述】:

我有一个 Maven/Spring Boot 项目和资源文件夹,其中包含带有拉丁字符和非拉丁字符的文件。

这是我的 pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <parent>
        <artifactId>example</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>api</artifactId>
    <packaging>war</packaging>

    <properties>
        <java.source.version>1.8</java.source.version>
        <java.target.version>1.8</java.target.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding
    </properties>

    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>${project.basedir}/src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <addResources>false</addResources>
                    <jvmArguments>
                        -Xdebug
                        -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
                    </jvmArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.source.version}</source>
                    <target>${java.target.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

现在在 Maven 构建后的 Linux 机器上(在 Jenkins 上),生成的 war 文件内的资源文件夹仅包含名称仅包含拉丁字符的文件。所有文件名包含非拉丁字符的文件都不存在在那里。

我做错了什么以及如何告诉 Maven 将所有文件放在那里?顺便说一句 - 在 Windows 机器上一切正常

更新

另外,我已经更新了我的 Jenkins,现在我的 war 文件中有所有文件。但现在我有另一个问题 - 解压缩后文件名中的所有非拉丁字符(战争文件)看起来像 ??????

看起来 Jenkins/Maven 构建出于某种原因杀死了文件名。如何解决?

这是一个带有 Unicode 文件名的示例 war 文件:war file,在 Linux 机器上解压缩后看起来像 ??????

【问题讨论】:

  • 您是否尝试在&lt;properties&gt; 部分定义&lt;project.build.sourceEncoding&gt;utf-8&lt;/project.build.sourceEncoding&gt;
  • @RomanPuchkovskiy 是的,它没有帮助
  • 我注意到一件事 - 我已经直接从 CLI 执行了 Maven 构建..所有文件都存在..但是为什么在 Jenkins 构建之后这些文件不存在.. Jenkins 如何对此产生影响过程?
  • 您的 Jenkins (Linux) 机器上的文件系统是什么?您可以在那里手动创建名称中包含非拉丁字符的任何文件吗?
  • 是的,我可以创建非拉丁字符。另外,我更新了我的 Jenkins,现在我的 war 文件中有所有文件。但现在我有另一个问题 - 解压缩后文件名中的所有非拉丁字符(war 文件)看起来像 ?????? 看起来 Jenkins/Maven 构建出于某种原因杀死了文件名。

标签: java spring maven jenkins unicode


【解决方案1】:

pom.xml 的以下更改帮助了我:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
...
<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <junitArtifactName>junit:junit</junitArtifactName>
                <encoding>UTF-8</encoding>
                <inputEncoding>UTF-8</inputEncoding>
                <outputEncoding>UTF-8</outputEncoding>
                <argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea -Dfile.encoding=UTF-8</argLine>
            </configuration>
        </plugin>
    </plugins>
</build>

【讨论】:

    【解决方案2】:

    只需在 pom.xml 文件中添加以下属性

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

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 2020-10-23
      • 2013-11-08
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多