मावेन मुझे एन्कोडिंग के बारे में चेतावनी क्यों देता है?


97

मेरा लक्ष्य एक प्रोजेक्ट से एक आर्कषक बनाना है।

जब मैं एक लक्ष्य चलाता हूं जिसमें मावेन-आर्कटाइप-प्लगइन शामिल नहीं होता है, तो मैं कोई चेतावनी नहीं देख सकता:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]

दूसरे छोर पर, जब मैं शस्त्रागार चलाता हूं: निर्माण-से-परियोजना, मुझे एक युगल मिलता है:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 10 resources
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources

मुझे पता है कि "मानक" मावेन तरीका project.build.sourceEncodingसंपत्ति का उपयोग करना है। मैंने इस मुद्दे को हल करने के लिए पोम में कुछ और गुणों को जोड़ने की कोशिश की लेकिन उनमें से किसी ने भी काम नहीं किया।

कोई विचार? धन्यवाद।

मेरे पास निम्नलिखित pom.xml है:

<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>my.group.id</groupId>
<artifactId>my-artifact</artifactId>
<version>0.0.1</version>
<packaging>maven-archetype</packaging>

<properties>

    <!-- Compiler properties -->
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
    <encoding>UTF-8</encoding>
    <project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
    <project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>
    <project.resources.sourceEncoding>${encoding}</project.resources.sourceEncoding>
    <archetype.encoding>${encoding}</archetype.encoding>

    <!-- Maven plugins version -->
    <maven-archetype-plugin-version>2.2</maven-archetype-plugin-version>
    <maven-resources-plugin-version>2.6</maven-resources-plugin-version>

    <!-- Maven extentions version -->
    <maven-archetype-packaging-extension-version>2.2</maven-archetype-packaging-extension-version>
</properties>
<dependencies>
[...]
</dependencies>

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>${maven-archetype-packaging-extension-version}</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>${maven-resources-plugin-version}</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-archetype-plugin</artifactId>
            <version>${maven-archetype-plugin-version}</version>
            <extensions>true</extensions>
        </plugin>

    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

जवाबों:


18

जब आप लक्ष्य को चलाते हैं archetype:create-from-project, तो Maven, आर्कियम के निर्माण के लिए POM फ़ाइल बनाता है target/generated-sources/archetype/pom.xmlऔर फिर packageइस POM पर लक्ष्य (डिफ़ॉल्ट रूप से) चलाता है ।

उत्पन्न POM फ़ाइल में project.build.sourceEncodingएन्कोडिंग को परिभाषित करने वाली कोई अन्य संपत्ति नहीं है , और इसीलिए आपको चेतावनी मिलती है।

POM इस प्रोटोटाइप से उत्पन्न होता है org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPom, और उस कोड से परिणामी POM फ़ाइल में गुण जोड़ने का कोई तरीका प्रतीत नहीं होता है।


146

आपने एन्कोडिंग डिफ़ॉल्ट गुण को इस तरह सेट नहीं किया है :

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

यह दृष्टिकोण हर प्लगइन के लिए मैन्युअल रूप से एन्कोडिंग को परिभाषित करने, के लिए डिफ़ॉल्ट मान होने सभी प्लग कारण से बेहतर है उदाहरण Maven-संसाधन-प्लगइन के लिए एन्कोडिंग :

encoding:

The character encoding scheme to be applied when filtering resources.
Type: java.lang.String
Required: No
User Property: encoding
Default: ${project.build.sourceEncoding}

तो इसका मतलब है कि आपको केवल इस संपत्ति को परिभाषित करने की आवश्यकता है और प्लगइन स्वचालित रूप से इस एन्कोडिंग का उपयोग करेगा।


1
मैंने इसे सेट किया। मेरे पोम को देखो। धन्यवाद
मार्को फेरारी

1
आप प्लगइन कॉन्फ़िगरेशन में प्रविष्टियों को हटा सकते हैं <encoding>${encoding}</encoding>
खमारबाईस

1
ठीक। मैंने उन प्रविष्टियों को यह देखने के लिए जोड़ा कि क्या समस्या हल हो गई है, लेकिन कोई किस्मत नहीं
मार्को फेरारी

मुझे यह नहीं पता है कि यूटीएफ -8 के बजाय प्लेटफॉर्म एन्कोडिंग का उपयोग क्यों किया जाता है। विरासत का समर्थन?
एमएसए

@msa के कारण सभी प्लेटफ़ॉर्म में UTF-8 डिफ़ॉल्ट रूप से नहीं है। सबसे सरल उदाहरण विंडोज।
खमरबाईस

35

उपरोक्त प्रविष्टि के बाद शिकायत करने वाले मावेन को देखकर मैं नाराज हो गया

तब मुझे एहसास हुआ कि इसके फेलसेफ प्लगइन और इसे अपनी संपत्ति की जरूरत है

तो यहाँ यह जाता है

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.