java - मेवेन में एन्कोडिंग कैसे कॉन्फ़िगर करें?
maven encoding (4)
जब मैं अपने बहु मॉड्यूल मैवेन प्रोजेक्ट पर maven install
करता हूं तो मुझे हमेशा निम्न आउटपुट मिलता है:
[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>
को कॉन्फ़िगर करना भी इसे ठीक नहीं करता है।
तो समस्या क्या है?
इसे इस्तेमाल करे:
<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>
ठीक है, मुझे समस्या मिली।
मैं कुछ रिपोर्टिंग प्लगइन का उपयोग करता हूं। 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>
यदि आप ऊपर दिए गए उत्तरों को गठबंधन करते हैं, तो आखिरकार एक pom.xml जो यूटीएफ -8 के लिए कॉन्फ़िगर किया गया है, ऐसा प्रतीत होना चाहिए।
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>
यह पिछले के अलावा होगा, अगर कोई स्कैनिश अक्षरों के साथ किसी समस्या को पूरा करता है जो ऊपर दिए गए समाधान के साथ हल नहीं होता है।
यदि जावा स्रोत फ़ाइलों में स्कैडिड अक्षरों होते हैं तो उन्हें संकलन के लिए उपयोग किए जाने वाले जावा द्वारा सही ढंग से व्याख्या करने की आवश्यकता होती है। (उदाहरण के लिए स्थिरांक में उपयोग किए गए स्कैडिड अक्षरों)
यहां तक कि फ़ाइलों को यूटीएफ -8 में संग्रहीत किया जाता है और मेवेन को यूटीएफ -8 का उपयोग करने के लिए कॉन्फ़िगर किया गया है, मेवेन द्वारा उपयोग की जाने वाली सिस्टम जावा अभी भी सिस्टम डिफ़ॉल्ट का उपयोग करेगी (उदाहरण के लिए: विंडोज़ में: cp1252)।
यह केवल मैवेन के माध्यम से परीक्षणों को देखेगा (संभवतः परीक्षणों में इन स्थिरांक के मूल्यों को मुद्रित करेगा। मुद्रित स्कैडिड अक्षरों को '<?>' के रूप में दिखाया जाएगा) यदि सही तरीके से परीक्षण नहीं किया गया है, तो यह कक्षा फ़ाइलों को संकलित परिणाम के रूप में दूषित करेगा और हो अनजान छोड़ दिया।
इसे रोकने के लिए, आपको यूटीएफ -8 एन्कोडिंग का उपयोग करने के लिए संकलित करने के लिए जावा सेट करना होगा। Maven pom.xml में एन्कोडिंग सेटिंग्स रखने के लिए पर्याप्त नहीं है, आपको पर्यावरण चर सेट करने की आवश्यकता है: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
इसके अलावा, यदि विंडोज़ में ग्रहण का उपयोग करते हैं, तो आपको इसके अलावा उपयोग किए गए एन्कोडिंग को सेट करने की आवश्यकता हो सकती है (यदि आप ग्रहण के माध्यम से व्यक्तिगत परीक्षण चलाते हैं)।