2013-01-14 16 views
7

Tôi đang phát triển một dự án web dựa trên maven. Trong mô-đun web của tôi, tôi đang sử dụng các gói tài nguyên ngôn ngữ cụ thể khác nhau (tiếng Đức, Tây Ban Nha, ....). Tất cả các nguồn của tôi đều dựa trên UTF-8 và erverything hoạt động tốt. Bây giờ nó là cần thiết để acitvate lọc maven resouce để thay thế một số cấu hình tùy thuộc vào hồ sơ maven khác nhau.Mã hóa sai sau khi kích hoạt lọc tài nguyên

pom.xml của tôi:

..... 
<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"> 
..... 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties>  
<build> 
<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
     <filtering>true</filtering>    
    </resource>  
</resources> 
.... 

Từ thời điểm này tập chiến tranh của tôi chứa bó tài nguyên với mã hóa sai. Ví dụ: tiếng Nga không còn được hiển thị trong ứng dụng web của tôi một cách chính xác nữa. Khi tôi tắt chức năng lọc tất cả mọi thứ thì tốt.

Giải pháp duy nhất tôi thấy được để thiết lập các project.build.sourceEncoding tài sản để 'tiêu chuẩn ISO-8859-1'

<properties> 
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding> 
</properties> 

Nhưng tôi không thể hiểu tại sao điều này là cần thiết? Tất cả các nguồn của tôi là UTF-8 và ứng dụng của tôi có dựa trên UTF-8 không? Điều gì sẽ xảy ra nếu tôi cần thêm gói tài nguyên với - ví dụ: ký tự tiếng Nhật?

Tôi đang phát triển trên Linux sử dụng Eclipse 4.2 và Maven 3

+0

bạn đang sử dụng maven-war-plugin (và phiên bản nào)? – ben75

+0

Tôi chưa định cấu hình rõ ràng plugin maven-war-plugin. Nhưng cũng có khi tôi thêm nó mã hóa đi sai. – Ralph

Trả lời

4

Bạn có thể chỉ định mã hóa trong các nguồn cắm cấu hình như vậy:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      ... 
      <encoding>UTF-8</encoding> 
      ... 
     </configuration> 
     </plugin> 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 

Link to the Docs

+0

Tôi sẽ đề xuất như vậy! – carlspring

+2

Tôi đã thử nghiệm điều này trước đây nhưng nó không có hiệu lực. – Ralph

+0

Cùng một vấn đề ở đây. Bạn cuối cùng đã làm cho nó hoạt động? – Sloy

0

Không thực sự là một câu trả lời cho bạn câu hỏi (xin lỗi), nhưng tôi nghĩ rằng đó là thông tin hữu ích về bất động sản project.build.sourceEncoding

là một nỗ lực để đơn giản hóa việc quản lý mã hóa trong các dự án maven.

Ý tưởng là tất cả các plugin sử dụng nó làm giá trị mã hóa mặc định bất cứ khi nào mã hóa không được chỉ định trong cấu hình plugin. Sử dụng thuộc tính này làm giá trị mã hóa mặc định hay không chỉ là đề xuất cho nhà phát triển plugin.

Tôi nghĩ rằng đây được thực hiện trong tất cả các plugin lớn và gần đây, nhưng một ngoại lệ quan trọng là maven-chiến-plugin trước khi phiên bản 2.2

nguồn:

  • thảo luận về project.build.sourceEncodinghere.
  • chi tiết mã hóa plugin chiến tranh là here.
+0

Cảm ơn thông tin đó. Nhưng nó nói rằng plugin chiến tranh trong phiên bản thực tế 2.3 tôn trọng thuộc tính project.build.sourceEncoding khi lọc tài nguyên. Nhưng điều này dường như không làm việc cho tôi. Chỉ khi tôi thiết lập project.build.sourceEncoding thành ISO-8859-1 các umlauts tiếng Đức được đưa vào chiến tranh của tôi một cách chính xác. – Ralph

3

Bạn có chắc chắn gói tài nguyên của mình (.properties) đang sử dụng UTF-8 không?

java.util.Properties giả định ISO-8859-1 để mã hóa gói tài nguyên, xem http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader) và tôi nghĩ Eclipse (cũng như IntelliJ IDEA) tôn vinh mã hóa mặc định này cho các tệp này (.properties).

Vì vậy, hãy đi và kiểm tra với trình chỉnh sửa văn bản mã hóa hiện tại cho các tệp này trong cây nguồn dự án của bạn, trong Windows Notepad 2 có thể giúp bạn với điều này.

Và sau đó cấu hình maven-resources-plugin như nêu ở đây Configure encoding for different filetypes in maven?

1

tôi đã cùng một vấn đề ngày hôm nay. Đặt project.build.sourceEncoding thành UTF-8 sẽ không hoạt động. Tất cả các tập tin được lọc sẽ được sao chép trong ISO-8859-1 (thực sự tôi đã không kiểm tra nhưng tôi chắc chắn rằng chúng không được sao chép trong UTF-8).
Giải pháp của tôi là khai báo hai phần <resource>. Một bao gồm tất cả các tệp bạn thực sự cần lọc. Một tài khoản khác để sao chép các tài nguyên khác với <filtering> được đặt thành false.
Nó hoạt động cho tôi vì tôi không cần phải lọc các tệp I18N và tệp cần được đặt giá trị khi bản dựng chỉ chứa các ký tự ASCII.

0

Trong Windows> Tuỳ chọn> Chung> Không gian làm việc có nút radio cho "Mã hóa tệp văn bản". Tôi đã thiết lập UTF-8 và nó đã phá vỡ tất cả các ký tự đặc biệt của tôi trong mã.

làm Mặc định trong Windows, đó là "Cp1252" tôi nghĩ.