মাভেনে কীভাবে এনকোডিং কনফিগার করবেন?


375

আমি যখন 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>ম্যাভেন-রিসোর্স-প্লাগইন বা মাভেন-কম্পাইলার-প্লাগইনকে কনফিগার করাও এটিকে ঠিক করে না।

তো সমস্যাটা কী?


1
আপনি যে এনকোডিং হিসাবে প্রকৃতপক্ষে নির্দিষ্ট করতে চান তা ইউটিএফ -8 এনকোডিং হওয়াই সাবধান হন। আপনি একটি সহজ এনকোডিং যেমন আইএসও -8859-1 (ওরফে ল্যাটিন -1) বা এমনকি ইউএস-এএসসিআইআই ব্যবহার করা ভাল।
আরএমপি

40
"আপনি যেমন একটি সহজ এনকোডিং যেমন ..." হ্যাঁ, এবং বাগের ব্যবহারকারীদের পাশাপাশি অন্য বিকাশকারীদের ব্যবহার করা ভাল ... আজকাল যতটা সম্ভব ইউটিএফ -8 ব্যবহার করার চেষ্টা করা এবং অন্যান্য সম্পর্কে যত্ন নেওয়া ভাল best যখন একাধিক-এনকোডিং অ্যাপ্লিকেশন প্রয়োজনীয়তা আপনার কাছে ফেলে দেওয়া হয় তখনই এনকোডিংগুলি। এখানে আমরা বেশিরভাগ উত্স এবং কনফিগারেশন ফাইলগুলির এনকোডিং সম্পর্কে কথা বলছি, ব্যবহারকারীর ইনপুটটির এনকোডিংটি আলাদাভাবে পরিচালিত হয় ('জাভা -ডফিল.ইনকোডিং ...' সহ এবং প্রচুর বেদনাদায়ক প্রোগ্রামিং প্রচেষ্টা সহ)।
জাকম্যাক

আমি ব্যক্তিগতভাবে সিদ্ধান্ত নিয়েছিলাম যে এনকোডিংয়ের বিষয়গুলি এতটাই অধরা ছিল যে আমি পম.এক্সএমএল এএসসিআইআই এনকোডিংয়ের জন্য গিয়েছিলাম এবং তারপরে এনকোডিংয়ের বিষয়গুলি সামনে নিয়ে এসেছি। এটিকে স্বাভাবিকভাবেই প্রথম দিন থেকে আমার নামে একটি অ-এসকিআইআই চরিত্র থাকার মাধ্যমে
উত্সাহিত করা হয়েছে

প্যারেন্ট pom.xML এ কোন এনকোডিং সেট করা আছে?
রিপন আল ওয়াসিম

উত্তর:


534

ঠিক আছে, আমি সমস্যাটি খুঁজে পেয়েছি।

আমি কিছু রিপোর্টিং প্লাগইন ব্যবহার করি। ফেইলসেফ-ম্যাভেন-প্লাগইন এর ডকুমেন্টেশনে ( 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


সুতরাং আমার এই সমস্যাটি ছিল এবং আমি উপরের থেকে এই বৈশিষ্ট্যগুলি যুক্ত করেছি: <প্রোফাইলেস << প্রোফাইলে> <অ্যাক্টিভেশন> <অ্যাক্টিভাই ডিফল্ট> সত্য </ b> ডিভাইস </ নিষ্ক্রিয়> <id> স্থানীয় </ i> <properties> <url> earneventapi.intra1.e1.v2.epaas.aexp.com </ url টি > <project.build.sourceEncoding> হল UTF-8 </project.build.sourceEncoding> <project.reporting.outputEncoding> হল UTF-8 </project.reporting .outputEncoding> </ বৈশিষ্ট্য> </ প্রোফাইল>
বব ছোট

না, কোডিংয়ের একমাত্র বিশ্বব্যাপী সেটিং হ'ল এনভির মাধ্যমে। পরিবর্তনশীল: stackoverflow.com/a/9976788/715269
Gangnus

এটি pom.xML ফাইলের বৈশিষ্ট্য ব্লকে 2 টি বৈশিষ্ট্য যুক্ত করার সময় প্রত্যাশা অনুযায়ী কাজ করে। ধন্যবাদ।
জিন পল রুইজ

47

এটি যদি পূর্ববর্তীগুলির সাথে যুক্ত হয় তবে যদি কেউ স্ক্যান্ডিক অক্ষরগুলির সাথে কোনও সমস্যার মুখোমুখি হয় যা উপরের সমাধানটি সমাধান করে না।

জাভা উত্স ফাইলগুলিতে যদি স্ক্যান্ডিক অক্ষর থাকে তবে সেগুলি সংকলনের জন্য ব্যবহৃত জাভা দ্বারা সঠিকভাবে ব্যাখ্যা করতে হবে । (যেমন ধ্রুবকগুলিতে ব্যবহৃত স্ক্যান্ডিক অক্ষর)

এমনকি ফাইলগুলি ইউটিএফ -8 এ সঞ্চিত রয়েছে এবং মাভেন ইউটিএফ -8 ব্যবহারের জন্য কনফিগার করা হয়েছে, মাভেন দ্বারা ব্যবহৃত সিস্টেম জাভা এখনও সিস্টেম ডিফল্ট ব্যবহার করবে (যেমন উইন্ডোজ: সিপি 1252)।

এটি কেবল মেভেনের মাধ্যমে পরীক্ষা চালানো দৃশ্যমান হবে (সম্ভবত পরীক্ষাগুলিতে এই ধ্রুবকের মানগুলি মুদ্রণ করা হবে। মুদ্রিত স্ক্যান্ডিক বর্ণগুলি '<?>' হিসাবে প্রদর্শিত হবে) যদি সঠিকভাবে পরীক্ষা না করা হয় তবে এটি ক্লাস ফাইলগুলি সংকলনের ফলাফল হিসাবে দূষিত করবে এবং হতে পারে নজর কাড়েনি

এটি প্রতিরোধ করতে, আপনাকে ইউটিএফ -8 এনকোডিংটি ব্যবহার করতে সংকলনের জন্য জাভাটি সেট করতে হবে। ম্যাভেন পম.এক্সএমএল এ এনকোডিং সেটিংস থাকা যথেষ্ট নয়, আপনাকে পরিবেশের পরিবর্তনশীল সেট করতে হবে: জাভাআলএফএলসিএল_অপশনস = -ডাইফেল.ইনকোডিং = ইউটিএফ 8

এছাড়াও, যদি উইন্ডোজে Eclipse ব্যবহার করা হয় তবে আপনার এটির পাশাপাশি ব্যবহৃত এনকোডিংও সেট করার প্রয়োজন হতে পারে (যদি আপনি গ্রহের মাধ্যমে পৃথক পরীক্ষা চালান)।


এটি করার কোনও খাঁটি উপায় আছে কিনা তা নিশ্চিত নয়, যেহেতু এটি জেভিএম সেটিং, মাভেন নয়।
ভিল মিরস্কিনেভা

4
আমি মনে করি আপনি জিনিসগুলি মিশ্রিত করছেন। আপনি কেবল -Dfile.encodingজাভাতে আই / ও ব্যবহার করলে কোনও এনকোডিং স্পষ্টভাবে নির্দিষ্ট না করে (যা প্রস্তাবিত নয়) সেট করতে হবে। জাভা উত্স ফাইলগুলিতে স্ক্যান্ডিক অক্ষরগুলির সাথে এটির কী আছে তা আমি দেখতে পাচ্ছি না। জাভা উত্স ফাইলগুলিতে নন-এএসসিআইআই project.build.sourceEncodingসঠিকভাবে সেট করা হলে মাভেনের সাথে কাজ করে , যেমন ইথান লেরয়ের উত্তরে বর্ণিত।
sleske

@ স্লেসকে আমি ধরে নিলাম যে এটি যথেষ্ট হবে তবে আমি যখন এখানে প্রথম এসে pom.xML পরিবর্তন করেছি তখন এটি আমার সমস্যার সমাধান করে নি। আরও অনুসন্ধান এবং পরীক্ষার পরে এবং ত্রুটির পরে সমাধান বর্ণিত সমাধানটি কাজ করে। আমি মনে করি যা ঘটেছিল তার কারণ হ'ল মেভেন ইনস্টলড / রেফার্ড জেডিকে জাভ্যাক বলে যা ফলস্বরূপ ও / এস এনকোডিংটি ডিফল্ট হিসাবে ব্যবহার করে। যদি কেউ pom.xML এ জাভ্যাক কলটির জন্য এনকোডিং নির্দিষ্ট করার কোনও উপায় জানে তবে এই সমস্যাটি "ম্যাভেন উপায়ে" সমাধান করবে।
ভিল মিরস্কিনেভা

4
@ ভিলিমায়ারস্কিনেভা: মাভেন যখন অনুরোধ করবেন তখন javacএটি সেট করে দেওয়া এনকোডিংটি পেরিয়ে যাবে project.build.sourceEncoding(আপনি এটি ব্যবহার করে পরীক্ষা করতে পারেন mvn -X), সুতরাং আপনার বিবরণটি কীভাবে প্রয়োজনীয় তা আমি দেখতে পাচ্ছি না। আপনি যদি এখনও আপনার প্রকল্পে এনকোডিংয়ের সমস্যা পান তবে এটিকে আলাদা প্রশ্ন হিসাবে জিজ্ঞাসা করার বিষয়টি বিবেচনা করুন - মনে হয় আপনি অন্য কোনও সমস্যার মধ্যে চলেছেন। আদর্শভাবে, একটি পুনরুত্পাদনযোগ্য টেস্ট কেস পোস্ট করুন।
sleske

@ স্লেসকে আমার প্রজেক্ট.বিল্ড.সোর্স এনকোডিং রয়েছে pom.xML এ, তবে এমভিএন পরীক্ষায় এখনও এনকোডিংয়ের সমস্যা রয়েছে। যখন -Dfile.encoding = UTF8 এটি সমাধান করে। আমি বুঝতে পারছি না কেন। stackoverflow.com/questions/42990644/…
টিইনা

41

যদি আপনি উপরের উত্তরগুলি একত্রিত করেন, শেষ পর্যন্ত ইউটিএফ -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>

1
ডিফল্টটি $ { प्रोजेक्ट.ইবিল্ড.সোর্স এনকোডিং to বলে মনে হচ্ছে, সুতরাং আপনার এটি স্পষ্টভাবে সংশোধন করার দরকার নেই ম্যাসেন -রিসোর্স-প্লাগইনের জন্য ( maven.apache.org/plugins/maven-resferences-plugin/example/… , maven.apache.org/plugins/maven-resources-plugin/… , maven.apache.org/general.html#encoding-warning )
জর্জ বারবিলিস

না, কোডিংয়ের একমাত্র বিশ্বব্যাপী সেটিং হ'ল এনভির মাধ্যমে। পরিবর্তনশীল: stackoverflow.com/a/9976788/715269
Gangnus

7

দেখে মনে হচ্ছে লোকে কোনও বিল্ট ফাইল / সংস্থান এনকোডিংয়ের সাথে একটি সামগ্রী এনকোডিং মিশ্রিত করে। শুধুমাত্র মভেন প্রপার্টি থাকা যথেষ্ট নয়। -Dfile.encoding=UTF8কার্যকর হচ্ছে না। এনকোডিংয়ের সমস্যা এড়াতে আপনার নিম্নলিখিত সহজ নিয়মগুলি অনুসরণ করা উচিত

  1. উপরে বর্ণিত হিসাবে মাভেন এনকোডিং সেট করুন:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. আপনার কোডটিতে ফাইল, স্ট্রিং, আইও নিয়ে কাজ করার সময় সর্বদা স্পষ্টভাবে এনকোডিং সেট করুন। আপনি যদি এই নিয়মটি অনুসরণ না করেন তবে আপনার অ্যাপ্লিকেশনটি পরিবেশের উপর নির্ভর করে। দ্য-Dfile.encoding=UTF8ঠিক রান-টাইম পরিবেশ কনফিগারেশন জন্য দায়ী, কিন্তু আমরা তা উপর নির্ভর করে করা উচিত নয়। আপনার যদি হাজার হাজার ক্লায়েন্ট থাকে তবে সিস্টেমগুলি কনফিগার করতে এবং এর কারণ হিসাবে সমস্যাগুলি খুঁজে পেতে আরও বেশি প্রচেষ্টা দরকার। আপনার কেবলমাত্র এটির উপরে অতিরিক্ত নির্ভরতা রয়েছে যা আপনি এটিকে স্পষ্টভাবে সেট করে এড়াতে পারবেন। জাভাতে বেশিরভাগ পদ্ধতি যা একটি ডিফল্ট এনকোডিং ব্যবহার করে তা হ্রাসের কারণ হিসাবে চিহ্নিত করা হয়েছে।

  2. আপনি যে কন্টেন্টটি নিয়ে কাজ করছেন সেটিও একই এনকোডিংয়ে রয়েছে তা নিশ্চিত করুন। যদি তা না হয় তবে আগের পদক্ষেপগুলিতে কিছু যায় আসে না! উদাহরণস্বরূপ কোনও ফাইলের এনকোডিংটি ইউটিএফ 8 না থাকলে সঠিকভাবে প্রক্রিয়া করা হবে না তবে আপনি এটি আশা করেন। লিনাক্সে ফাইল এনকোডিং পরীক্ষা করতে:

$ ফাইল --মাইম F_PRDAUFT.dsv

  1. অনুরোধ / প্রতিক্রিয়াগুলিতে ক্লায়েন্ট / সার্ভারকে স্পষ্টভাবে এনকোডিং সেট করতে বাধ্য করুন, এখানে উদাহরণ রয়েছে:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

আশা করি এটি কারও কাজে আসবে।


না, কোডিংয়ের একমাত্র বিশ্বব্যাপী সেটিং হ'ল এনভির মাধ্যমে। পরিবর্তনশীল: stackoverflow.com/a/9976788/715269
Gangnus

6

এটা চেষ্টা কর:

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

বিশেষত গুরুত্বপূর্ণ, আমাদের ভুলে যাওয়া উচিত নয় যে কেবল উত্সই নয়, উত্সগুলিতেও এই এনকোডিং সেটিংসের প্রয়োজন।
পিটারঃ

1

আমার ক্ষেত্রে আমি maven-dependency-pluginসমস্যাটি সমাধান করার জন্য এটি ব্যবহার করছিলাম আমাকে নীচের সম্পত্তিটি যুক্ত করতে হয়েছিল:

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

দেখুন এ্যাপাচি ম্যাভেন সম্পদ প্লাগইন / একটি অক্ষর এনকোডিং স্কীম নির্দিষ্ট করা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.