[java] Maven에서 인코딩을 구성하는 방법은 무엇입니까?
maven install
멀티 모듈 maven 프로젝트에서 실행할 때 항상 다음과 같은 출력이 나타납니다.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
그래서 약간의 구글 검색을했지만 찾을 수있는 것은 추가해야한다는 것입니다.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
… 내 pom.xml에. 그러나 이미 있습니다 (부모에 있음 pom.xml
).
구성 <encoding>
받는다는 – 자원 – 플러그인 또는 받는다는 – 컴파일러 플러그인을 수정하지 않습니다도합니다.
그래서 무엇이 문제입니까?
답변
좋아, 나는 문제를 발견했다.
일부보고 플러그인을 사용합니다. failsafe-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) 의 설명서 에서 <encoding>
구성은 물론 ${project.reporting.outputEncoding}
기본적으로 사용 됩니다. . 그래서 속성을 요소의 자식 요소로 추가했으며 project
이제 모든 것이 정상입니다.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
또한보십시오 http://maven.apache.org/general.html#encoding-warning
답변
누군가가 위의 해결책으로 해결되지 않는 스캔 같은 글자의 문제를 만난다면 이전에 추가되었을 것입니다.
Java 소스 파일에 스캔 문자가 포함되어 있으면 컴파일에 사용되는 Java에서 올바르게 해석해야합니다 . (예 : 상수에 사용되는 스캔 문자)
파일이 UTF-8로 저장되고 Maven이 UTF-8을 사용하도록 구성되어 있어도 Maven에서 사용하는 시스템 Java는 여전히 시스템 기본값을 사용합니다 (예 : Windows : cp1252).
이것은 maven을 통해 테스트를 실행하는 경우에만 볼 수 있습니다 (테스트에서 이러한 상수 값을 인쇄 할 수 있습니다. 인쇄 된 스캔 문자는 ‘<?>’로 표시됩니다) 제대로 테스트하지 않으면 클래스 파일이 컴파일 결과로 손상되고 눈에 띄지 않게 남았습니다.
이를 방지하려면 컴파일 에 사용 되는 Java가 UTF-8 인코딩을 사용 하도록 설정해야합니다 . maven pom.xml에 인코딩 설정이 충분하지 않으므로 환경 변수를 설정해야합니다. JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
또한 Windows에서 Eclipse를 사용하는 경우 이클립스를 통해 개별 테스트를 실행하는 경우 이외에도 사용되는 인코딩을 설정해야 할 수도 있습니다.
답변
위의 답변을 결합하면 마지막으로 UTF-8 용으로 구성된 pom.xml이 그렇게 보입니다.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>YOUR_COMPANY</groupId>
<artifactId>YOUR_APP</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<project.java.version>1.8</project.java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- Your dependencies -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${project.java.version}</source>
<target>${project.java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
답변
사람들은 컨텐츠 인코딩을 빌드 된 파일 / 리소스 인코딩과 혼합하는 것 같습니다. 메이븐 속성만으로는 충분하지 않습니다. 데-Dfile.encoding=UTF8
효과가 없습니다. 인코딩 문제가 발생하지 않도록하려면 다음과 같은 간단한 규칙을 따라야합니다.
- 위에서 설명한대로 maven 인코딩을 설정하십시오.
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
코드에서 파일, 문자열, IO로 작업 할 때는 항상 명시 적으로 인코딩을 설정하십시오. 이 규칙을 따르지 않으면 응용 프로그램은 환경에 따라 다릅니다. 그만큼
-Dfile.encoding=UTF8
정확히 런타임 환경 구성에 대한 책임이있다, 그러나 우리는 그것을에 의존해서는 안된다. 수천 개의 클라이언트가있는 경우 시스템을 구성하고 그로 인해 문제를 찾는 데 더 많은 노력이 필요합니다. 명시 적으로 설정하여 피할 수있는 추가 종속성이 있습니다. 기본 인코딩을 사용하는 Java의 대부분의 메소드는 사용되지 않는 것으로 표시됩니다. -
작업중인 컨텐츠가 동일한 인코딩으로되어 있는지 확인하십시오. 그렇지 않은 경우 이전 단계는 중요하지 않습니다! 예를 들어 인코딩이 UTF8이 아니지만 예상 한 경우 파일이 올바르게 처리되지 않습니다. Linux에서 파일 인코딩을 확인하려면 다음을 수행하십시오.
$ 파일 –mime F_PRDAUFT.dsv
- 요청 / 응답에서 클라이언트 / 서버 세트 인코딩을 명시 적으로 적용하십시오. 예는 다음과 같습니다.
@Produces("application/json; charset=UTF-8") @Consumes("application/json; charset=UTF-8")
이것이 누군가에게 도움이되기를 바랍니다.
답변
이 시도:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
...
<encoding>UTF-8</encoding>
...
</configuration>
</plugin>
</plugins>
...
</build>
...
</project>
답변
내 경우 maven-dependency-plugin
에는 문제를 해결하기 위해 그렇게 사용하고 있었고 다음 속성을 추가해야했습니다.
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>