2012-06-21 2 views
15

maven-resource-plugin을 사용하여 내 메이븐 프로젝트의 일부 리소스를 필터링합니다. 내 부모 프로젝트에서 내가 가진 : 하위 프로젝트에서 Maven에서 다른 파일 유형의 인코딩을 설정 하시겠습니까?

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

내가 기본 인코딩 = ISO-8859-1와 일반 java properties filetest.properties 파일이 있습니다. 이 파일에는 다음이 포함

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <configuration> 
     <nonFilteredFileExtensions> 
     <nonFilteredFileExtension>ico</nonFilteredFileExtension> 
     <nonFilteredFileExtension>jar</nonFilteredFileExtension> 
     </nonFilteredFileExtensions> 
    </configuration> 
    <executions> 
     <execution> 
     <id>filter-properties-files</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <!-- java properties files are encoded in ISO-8859-1 so when 
      filtering those files we stick with that encoding. --> 
      <encoding>ISO-8859-1</encoding> 
      <outputDirectory>${basedir}/after</outputDirectory> 
      <resources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>${basedir}/before</directory> 
       <includes> 
       <include>**/*.properties</include> 
       </includes> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
     <execution> 
     <id>filter-non-properties-files</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <encoding>${project.build.sourceEncoding}</encoding> 
      <outputDirectory>${basedir}/after</outputDirectory> 
      <resources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>${basedir}/before</directory> 
       <includes> 
       <include>**/*.product</include> 
       <include>**/*.inf</include> 
       </includes> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

이 과잉 보인다 나는 느낌이 :

aboutText=Version ${project.version} © 2012 blabla 

내가 별도의 실행으로 받는다는 - 리소스 플러그인을 분할 한 제대로 확인이 파일 필터를 만들려면 그 인코딩 각 플러그인을 올바르게 사용하지 않거나이 문제를 다른 방법으로 처리해야한다는 것입니다. 속성 파일의 특수 문자를 직접 인코딩하는 경우가있을 수 있습니다.

aboutText=Version ${project.version} \u00a9 2012 blabla 

?

+0

이 경우 자신의 메이븐 플러그인을 작성하는 것이 좋습니다. (개미 플러그인을 사용하는 옵션이있을 수 있지만 단지 추측입니다) – wemu

+0

속성 파일에 대한 추가 섹션을 수행해야합니까? 은 소스 코드에만 해당하는 반면 속성 파일은 리소스이므로 소스 코드가 아닙니다. – hennr

+0

'project.build.sourceEncoding'은 실제로'maven-resources-plugin'에 적용됩니다. https://maven.apache.org/plugins/maven-resources-plugin/xref/org/apache/maven/plugin/resources/를 참조하십시오. ResourcesMojo.html # 69,'encoding'의 기본값은'project.build.sourceEncoding'입니다 –

답변

2

당신은 실행을 구성해야하는 것이 맞습니다 ... 표준 디렉토리 레이아웃을 따르고 있지만 사용중인 파일을 ${basedir}/before${basedir}/after이므로 기본 실행 을 build 섹션에 추가하는 것과 결합하여 resources:resources의 기본 실행이 작동하지 않습니다.

필터링 된 파일의 인코딩은 원래 pom 모델 사양의 감독이었고, 가능성이 분명히 복잡한 절차로, 메이븐

4

문제는 그 자체로 귀중한 해답의 일부는 아직 지정되지 않은 버전에서 수정 될 것입니다 작성자는 다양한 필터링 된 파일 형식에 대해 서로 다른 인코딩을 구성 할 수있는 유일한 방법입니다. 주어진 예는, 그러나, 예를 들어 실제 사용이 개는 내포되는없이, 저자의 표준이 아닌 사용의 경우 특정하고, 몇 가지 중요한 사항 얼버무 :

그것은 명확하지 않다
  • , 저자의 예제 에서 기본 리소스 복사 목표 resources은 여전히 ​​활성화되어이며 정의 된 두 가지 목표 이외에 실행됩니다.
  • 작성자가 process-resources 대신 수명주기 단계 generate-resources을 사용했음을 알 수 있습니다. 위의 첫 번째 요지를 둘러 보는 것은 속임수입니다. 두 개의 copy-resources 목표를 이전 라이프 사이클 단계에서 발생 시키면 리소스가 지정된 규칙에 따라 복사되고 default-resources 목표가 원래 리소스를 따라 오면 복사가 그대로 유지됩니다. 이는 overwrite 기본값이 false이므로 기본값입니다. 하지만 disable altogetherdefault-resources 실행이 더 좋습니다.
  • 저자는 outputDirectory 선언문을 제공합니다. 커스텀 아웃풋 디렉토리가 필요했기 때문에 저자가 이것을 제공했다고 생각하는 것은 자연스러운 일이다. 결국 resources 목표는이 설정에 대한 기본값을 제공합니다. 이상하게도, copy-resources 목표의 경우이 설정이 실제로 필요합니다! 그러나 값으로 사용할 수있는 표준 Maven 변수 ${project.build.outputDirectory}이 있습니다.질문에 저자의 자신의 예에

건물, 여기 필터링하지 않고 다른 파일을 복사하고, 발생 기본 리소스 복사를 방지, ISO-8859-1을 사용하여 등록 정보 파일을 필터링하는 잘라 내기 및 붙여 넣기 방법입니다 ; 모두 표준 소스 및 대상 디렉토리를 사용합니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.7</version> 
    <executions> 
    <execution> 
     <!-- Turn off default resource copying --> 
     <id>default-resources</id> 
     <phase /> 
    </execution> 
    <execution> 
     <!-- Filter resources in properties files. --> 
     <id>filter-properties-files</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <encoding>ISO-8859-1</encoding> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <resources> 
      <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    <execution> 
     <!-- Do not do property substitution in files that are not properties files, such as binary files. --> 
     <id>copy-other-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <resources> 
      <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

이 피드백에 감사드립니다! 질문 :이 작업은 build.resources resp 아래 정의 된 자원 및 필터링 옵션과 어떻게 작동합니까? build.testResources? 플러그인 구성을 모두 구성해야합니까, 아니면 구성해야합니까? – Puce

관련 문제