আপনি কীভাবে একটি পম.এক্সএমএল ফাইলটিতে জাভা সংকলক সংস্করণটি নির্দিষ্ট করবেন?


252

আমি নেটবিনে একটি মাভেন কোড লিখেছি যার প্রায় 2000 টিরও বেশি লাইন রয়েছে। আমি যখন এটি নেটবিনে সংকলন করি তখন সমস্ত কিছু ঠিকঠাক হয় তবে আমি যদি এটি কমান্ড লাইনে চালাতে চাই তবে আমি এই ত্রুটিগুলি পেয়ে যাব:

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        HashSet<Double> resid_List = new HashSet<Double>(Arrays.asList(resid_val));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        List<Integer> ind_ovlpList = new ArrayList<Integer>(Arrays.asList(ind_ovlp));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
public class ColumnComparator implements Comparator<double[]> {

annotations are not supported in -source 1.3
(use -source 5 or higher to enable annotations)
@Override

আমি জাভা 1.3.1, সংকলক ত্রুটি ব্যবহার করার চেষ্টা করেছি , তবে আমি আরও ত্রুটি পেয়েছি। আমি অন্যান্য পোস্ট থেকে খুঁজে পেয়েছি যে আমার pom.xML পরিবর্তন করা উচিত, তবে কীভাবে তা আমি জানি না। এখানে আমার 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>com.mycompany</groupId>
  <artifactId>mavenmain</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>mavenmain</name>
    <url>http://maven.apache.org</url>

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

   <dependencies>
     <dependency>
       <groupId>junit</groupId>
        <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
     <dependency>
        <groupId>gov.nist.math</groupId>
        <artifactId>jama</artifactId>
        <version>1.0.2</version>
     </dependency>
   </dependencies>
 </project>

আপনি যদি আমাকে সাহায্য করতে পারেন তবে দুর্দান্ত হবে।


2
জাভা সংস্করণ আপগ্রেড করার সময়।
সোতিরিওস ডেলিমনোলিস

5
জেনারিকসগুলি জাভা 5 থেকে সমর্থিত that জাভা সংস্করণের আগে তাদের কাজ করা অসম্ভব।
লুইগি মেন্দোজা

OpenJDK javac জন্য ডিফল্ট, 1.3 যেখানে ওরাকল JDK জন্য এটি 1.5
Thorbjørn Ravn অ্যান্ডারসনকে

দু'জনেই আমার কাছে প্রোগ্রামার হওয়ার প্রবণতা!
CorayThan

উত্তর:


307
<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>(whatever version is current)</version>
        <configuration>
          <!-- or whatever version you use -->
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

মাভেন সংকলক প্লাগইনের জন্য কনফিগার পৃষ্ঠাটি দেখুন:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

ওহ, এবং: জাভা 1.3.x ব্যবহার করবেন না, বর্তমান সংস্করণগুলি জাভা 1.7.x বা 1.8.x


4
আপনি ম্যাডেন এনফোর্সারের প্লাগিনের সাহায্যে মাভেন চালানোর জন্য আপনি যে জেডিকে সংস্করণটি ব্যবহার করছেন তাতে আপনি একটি চেক যুক্ত করতেও চাইবেন : maven.apache.org/enforcer/maven-enforcer-plugin আমি বিভিন্ন প্রকল্পকে সমর্থন করার জন্য এটি খুব সুবিধাজনক বলে মনে করি যা বিভিন্ন জেডিকে সংস্করণে রয়েছে। এটি জাভা 8 প্রকল্পের উদাহরণস্বরূপ জাভা 8 এর সাথে সংকলন করে তা এড়ানো যায়।
উইম দেবলাউয়ে

2
প্লাগইন সংস্করণটি অনুপস্থিত। এটি কোনও ত্রুটি ফেলবে না তবে এটির ভার্সনটি সেট করার জন্য দৃ strongly়ভাবে সুপারিশ করা হয়েছে। বর্তমান সংস্করণটি 3.3
লুকাস ভার্নার

1
@ লুকাস ওয়ার্নার আপনি অবশ্যই আছেন তবে আমি যদি একটি সংস্করণ যুক্ত করি তবে আমাকে প্রতি কয়েকমাস প্রশ্নটি সম্পাদনা করতে হবে। একটি আপস করতে গিয়েছিলেন :-)
সান প্যাট্রিক ফ্লয়েড

দয়া করে স্পষ্ট করুন ... এই ট্যাগটি <version> (যে কোনও সংস্করণ বর্তমান) </version> এ কী যাবে? এটি কি 1.7 এর মতো কিছু?
ইলিয়াস

2
@ এলিজাহ নং, এটি জাভা ভাষার সংস্করণ হবে। আমি প্লাগইন সংস্করণ সম্পর্কে কথা বলছি। আপনি এই লিঙ্কটির মাধ্যমে এটি খুঁজে পেতে পারেন: mvnrepository.com/artifact/org.apache.maven.plugins/…
সান প্যাট্রিক ফ্লয়েড

360

maven-compiler- plugins এটি ইতিমধ্যে pom.xML- এ প্লাগইনগুলির শ্রেণিবিন্যাস নির্ভরতাতে উপস্থিত রয়েছে। কার্যকর পিওএম চেক ইন করুন।

সংক্ষেপে আপনি এই জাতীয় বৈশিষ্ট্য ব্যবহার করতে পারেন:

<properties>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>

আমি ম্যাভেন ৩.২.৫ ব্যবহার করছি


"সেরা" কোন উপায়ে? নির্বাচিত উত্তরের তুলনায় এইটি কম ভার্বোজ, তবে এটি একরকম গোপন মনে হয়। এমনকি মাভেন সাইটের ডকুমেন্টেশনগুলি প্লাগইন ব্যবহার করে দেখায়।
এমকোবিট

2
@ এমকোবিট আমার ধারণা এটি ব্যক্তিগত পছন্দ। আমার যদি সংকলক এবং উত্স সংস্করণ ছাড়াও অন্য কিছু কনফিগার করতে হয় তবে আমি প্লাগইন বিভাগে এটি করতে পছন্দ করি।
লেকবর্গগুলি

1
"অন্য কিছু কনফিগার করুন" দিয়ে ভাল পয়েন্ট। আমি যদি গুগল / ত্রুটি-প্রবণ জাতীয় কিছু ব্যবহার করতে চাই তবে আমাকে প্লাগইন বিভাগের উপায়ে ব্যবহার করতে হবে।
এমকোবিট

5
মাভেন ডকুমেন্টেশন পৃষ্ঠায় এটি এখন প্রথম পদ্ধতি যা @ এমকোবিট দিয়েছে। অনেক ভাল, এবং আপনাকে সংকলক প্লাগইনের সংস্করণটি পিন করতে হবে না।
ড্যানিলা পিয়াতভ

আমি ইন্টেলিজিতে প্রকল্পটি পুনরায় তৈরি করার পরে এটি আমার পক্ষে কাজ করেছিল। প্রকল্পটি পম ফাইলটি নতুন প্রকল্প হিসাবে খোলার মাধ্যমে আমি ইন্টেলিজজে প্রকল্পটি পুনরায় খুলতে হয়েছিল যা আমি ধরে নিচ্ছি যে প্রকল্পটি পুনরায় তৈরি করা হচ্ছে।
ব্যবহারকারী 674669

13

সাধারণত আপনি কেবল sourceসংস্করণটিকে ( javac -source 1.8উদাহরণস্বরূপ) মূল্য দিতে চান না তবে আপনি সংস্করণ sourceএবং targetসংস্করণ উভয়েরই মূল্য দিতে চান ( javac -source 1.8 -target 1.8উদাহরণস্বরূপ)।
নোট করুন যে জাভা 9 থেকে আপনার কাছে ক্রস-সংকলন সামঞ্জস্যতা ( javac -release 9) উভয় তথ্য এবং আরও শক্তিশালী উপায়ে পৌঁছে দেওয়ার উপায় রয়েছে । কমান্ডটি
মোড়ানো মাভেন javacএই সমস্ত জেভিএম স্ট্যান্ডার্ড বিকল্পগুলি জানাতে একাধিক উপায় সরবরাহ করে।

জেডিকে সংস্করণটি কীভাবে নির্দিষ্ট করবেন?

ব্যবহার maven-compiler-pluginবা maven.compiler.source/ maven.compiler.targetবৈশিষ্ট্য উল্লেখ করতে sourceএবং targetসমতুল্য।

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

এবং

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

সংকলক প্লাগইনের ম্যাভেন ডকুমেন্টেশন অনুসারে সমান <source>এবং যেহেতু <target>সংকলক কনফিগারেশনের উপাদানগুলি বৈশিষ্ট্যগুলি ব্যবহার করে maven.compiler.sourceএবং maven.compiler.targetযদি সেগুলি সংজ্ঞায়িত করা হয়।

উৎস

-sourceজাভা কম্পাইলার জন্য যুক্তি।
ডিফল্ট মান হল: 1.6
ব্যবহারকারী সম্পত্তি হল: maven.compiler.source

লক্ষ্য

-targetজাভা কম্পাইলার জন্য যুক্তি।
ডিফল্ট মান হল: 1.6
ব্যবহারকারী সম্পত্তি হল: maven.compiler.target

জন্য ডিফল্ট মান সম্পর্কে sourceএবং target, নোট যে যেহেতু 3.8.0ম্যাভেন কম্পাইলার, ডিফল্ট মান থেকে পরিবর্তিত হয়েছে 1.5থেকে1.6

ম্যাভেন-কম্পাইলার-প্লাগইন 3.6 থেকে আপনার জাভা সংস্করণ নির্দিষ্ট করার একটি নতুন উপায় রয়েছে

আপনি ব্যবহার করতে পারেন যুক্তি :release

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>9</release>
    </configuration>
</plugin>

আপনি কেবল ব্যবহারকারীর সম্পত্তি ঘোষণা করতে পারেন maven.compiler.release:

<properties>
    <maven.compiler.release>9</maven.compiler.release>
</properties>

তবে এই মুহূর্তে শেষটি পর্যাপ্ত হবে না কারণ আপনি যে maven-compiler-pluginডিফল্ট সংস্করণটি ব্যবহার করেন তা সাম্প্রতিক পর্যায়ে যথেষ্ট সংস্করণের উপর নির্ভর করে না।

মাভেন releaseআর্গুমেন্ট জানায় release: একটি নতুন জেভিএম স্ট্যান্ডার্ড বিকল্প যা আমরা জাভা 9 থেকে পাস করতে পারি:

নির্দিষ্ট ভিএম সংস্করণের জন্য সর্বজনীন, সমর্থিত এবং ডকুমেন্টেড এপিআইয়ের বিরুদ্ধে সংকলন করে।

এই উপায়টি source, targetএবং এবং bootstrapজেভিএম বিকল্পগুলির জন্য একই সংস্করণটি নির্দিষ্ট করার জন্য একটি মানক উপায় সরবরাহ করে ।
নোট করুন যে bootstrapক্রস সংকলনের জন্য উল্লেখ করা একটি ভাল অনুশীলন এবং আপনি যদি ক্রস সংকলন না করেন তবে এটির ক্ষতি হবে না।

জেডিকে সংস্করণ নির্দিষ্ট করার সর্বোত্তম উপায় কোনটি?

জাভা 8 এবং নীচের জন্য:

না maven.compiler.source/ maven.compiler.targetবৈশিষ্ট্য বা ব্যবহার maven-compiler-pluginভাল হয় না। শেষ পর্যন্ত দুটি উপায় একই বৈশিষ্ট্য এবং একই প্রক্রিয়া: মাভেন কোর সংকলক প্লাগইন উপর নির্ভর করে যেহেতু এটি সত্যে কিছুই পরিবর্তন করে না।

ঠিক আছে, আপনার যদি সংকলক প্লাগইনে জাভা সংস্করণগুলির তুলনায় অন্য বৈশিষ্ট্য বা আচরণ নির্দিষ্ট করার প্রয়োজন না হয় তবে এই উপায়টি আরও সংক্ষিপ্ত বলে আরও বেশি অর্থবোধ করে:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

জাভা 9 থেকে:

releaseআপনি যদি sourceএবং এর জন্য একই সংস্করণটি ব্যবহার করতে চান তবে যুক্তি (তৃতীয় পয়েন্ট) দৃ strongly়তার সাথে বিবেচনা করার একটি উপায় target


10

আমি নিগ্রহের নিয়ন সরল মাভেন জাভা প্রকল্পে একই সমস্যার মুখোমুখি হয়েছি

তবে আমি নীচে pom.xML ফাইলের মধ্যে বিশদ যুক্ত করব

   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

প্রকল্প> মাভেন> আপডেট প্রকল্পে ডান ক্লিক করার পরে (চেক ফোর্স আপডেট)

প্রকল্পে ত্রুটি প্রদর্শন করার জন্য এটির সমাধান করুন

আশা করি এটি সহায়ক হবে

Thansk


আমি যখন এসকিউএল সার্ভারের জন্য মাইক্রোসফ্ট জেডিবিসি ড্রাইভারের জন্য এসকিএল সার্ভারসাম্পল অ্যাপটি তৈরি করার চেষ্টা করছিলাম তখন এটি আমার জন্য কাজ করেছিল।
স্কাই --- অধিনায়ক

0
<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <fork>true</fork>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin> 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.