মাভেনের ব্যবহারের জন্য জেডিকে নির্দিষ্ট করুন


141

আমি একটি হডসন প্লাগইন তৈরির চেষ্টা করছি যা আমি সংশোধন করেছি এবং এর জন্য jdk1.6 প্রয়োজন। এটি ঠিক আছে, তবে আমি দেখতে পাই না যে আমি জেভেনকে কীভাবে বলতে পারি যে আলাদা জেডি কে আছে। আমি ইন্টারনেটে কয়েকটি উল্লেখ পেয়েছি তবে সেগুলি আমার কাছে প্রযোজ্য বলে মনে হয় না। কেউ কেউ কিছু কনফিগার যুক্ত করার পরামর্শ দেয় .m2/settings.xmlতবে আমার কাছে এটি নেই settings.xml। এছাড়াও, আমি সমস্ত মেভেন বিল্ডগুলির জন্য 1.6 ব্যবহার করতে চাই না।

একটি mvnগিফ আমি সাইগউইন এ ব্যবহার করছি , যদি তা মোটেই গুরুত্বপূর্ণ। এটি প্রজেক্ট পম ফাইলটিতে আমার স্পেসিফিকেশন তৈরি করতে সক্ষম হওয়া উচিত বলে মনে হয় তবে বিদ্যমান পমটি বেশ খালি।

সুতরাং নীচের লাইনটি হল, মাভেনের একক অনুরোধের জন্য কোনও জেডিকে নির্দিষ্ট করার কোনও উপায় আছে কি?

উত্তর:


142

সুতরাং নীচের লাইনটি হল, মাভেনের একক অনুরোধের জন্য কোনও জেডিকে নির্দিষ্ট করার কোনও উপায় আছে কি?

অস্থায়ীভাবে আপনার JAVA_HOMEপরিবেশের ভেরিয়েবলের মান পরিবর্তন করুন।


10
উইন্ডোজ উদাহরণ:set JAVA_HOME="C:\Java\jdk7"
acdcjunior

6
লুবুন্টুতে: জাভাহোম = "/ হোম / দেশা / প্রোগ্রামাস / জেডিএক্স / জেডিকি 1.6.0_45 /" এমভিএন-ভি
এনরিক সান

8
এবং যদি অন্য কেউ ভুলে যায় এবং যুগে যুগে তারা কেন এটি পরিবর্তন JAVA_HOMEকরতে পারে না তা ভেবে ব্যয় করে: এই ফাইলটিতে ম্যাভেনের জন্য (অন্তত ম্যাকের জন্য) সেট করা যেতে পারে: /private/etc/mavenrc - এবং এটি এমন কিছু ব্যবহার করতে পারে (ব্যাকটিকগুলি একক উদ্ধৃতি নয়!):export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_75`
রেডইতি

3
ইউনিক্স: export JAVA_HOME='D:/dev/java/jdk8/jre'(আমার জন্য কাজ করে)
ক্রিস্টোফ রাউসি

2
আমি যদি জাএভিএহোম পরিবর্তন করি এবং তারপর আমি করি তবে java -versionএটি পূর্ববর্তী সংস্করণটি মুদ্রণ করে।
অ্যাক্রামাট

82

মনে হচ্ছে যে ম্যাভেন এখন এখানে একটি সমাধান দেয়: একটি ভিন্ন জেডিকে ব্যবহার করে উত্সগুলি সংকলন করা

আসুন JAVA_HOMEজেডিকে 7-এ আপনার পয়েন্টগুলি বলুন (যা maven প্রক্রিয়া চালাবে)

আপনার pom.xmlহতে পারে:

<build>
    <plugins>
        <!-- we want JDK 1.6 source and binary compatiblility -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- ... -->
        <!-- we want sources to be processed by a specific 1.6 javac -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable>${JAVA_1_6_HOME}/bin/javac</executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

আপনার বিকাশকারীরা যদি নিম্নলিখিত পংক্তিতে কেবল তাদের (এবং কাস্টমাইজ) যুক্ত করেন তবে আপনার পম settings.xmlপ্ল্যাটফর্মটি স্বতন্ত্র হবে:

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
          <JAVA_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</JAVA_1_6_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>

18
ভোট দিয়েছেন! আমি খুঁজে পেয়েছি যে আমি ব্যবহার করতে পারি -Dmaven.compiler.fork=trueএবং -Dmaven.compiler.executable=/path/to/target/javacকমান্ড লাইনেও।
জিন কোওন

এমনকি সেই জাভা-অপ্ট ব্যবহার করে, আপনাকে অবশ্যই এটি সংকলক প্লাগইনে <এক্সিকিউটেবল> {{maven.compiler.executable} </executable> এ যোগ করতে হবে
পল গ্রেগোয়ার

2
সংযুক্তকারী প্লাগইন বিভাগে এটি সংজ্ঞায়িত না করেই @ জিনকওয়ন -D সহ পাসিং বিকল্পগুলি দুর্দান্ত কাজ করে works এটি মাঝে মধ্যে ব্যবহারের জন্য বা স্ক্রিপ্টিংয়ের জন্য দুর্দান্ত। আপনার এটি আলাদা আলাদা উত্তরে রাখা উচিত যাতে আমরা এটিতে ভোট দিতে পারি!
গাত্তান লেহমান

আমি যখন জাভা 8-তে পরীক্ষা চালানোর চেষ্টা করেছি তখন এই সমাধানটি ব্যর্থ হয়েছে আমি পেয়ে যাচ্ছি * অসমর্থিত
মেজর minমিনারের

39

কম্পাইল: কম্পাইল হয়েছে একটি ব্যবহারকারী সম্পত্তি আছে যাতে আপনি একটি পাথ নির্দিষ্ট করার অনুমতি দেয় javac

নোট করুন যে এই ব্যবহারকারীর সম্পত্তি কেবল তখনই forkকাজ করে trueযা falseডিফল্টরূপে হয়।

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

এতে শূন্যস্থান থাকতে পারে আপনাকে মানটির দ্বিগুণ মূল্য দিতে হতে পারে।

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile

আরও দেখুন ম্যাভেন কাস্টম বৈশিষ্ট্য প্রাধান্য


আমার JAVA_HOMEভেরিয়েবলটি ওভাররাইট করা দরকার ছিল । উদাহরণস্বরূপ (ব্যাশ শেলের মধ্যে):JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/usr/lib/jvm/java-8-openjdk-amd64/bin/javac spring-boot:run
এনরিক এস ফিলিএজ

24

যেমনটি আপনি বলেছেন "প্লাস, আমি সমস্ত মেভেন বিল্ডগুলির জন্য 1.6 ব্যবহার করতে চাই না" ".... তাই আরও ভাল আমি আপনার পম ফাইলটি সংশোধন করে কোন jdk সংস্করণটি ব্যবহার করব তা নির্দিষ্ট করে বলব।

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

এটি নিশ্চিত করবে যে আপনার নির্দিষ্ট প্রকল্পটি সেই সংস্করণটি jdk ব্যবহার করে।


6
এটি কেবল প্রারম্ভিক বিন্দু, তবে সমাধান নয়। এটি মভেন কম্পাইলার প্লাগইনটির 1.7 এর জন্য সংকলন করার প্রয়োজনীয়তা। এবং তারপরে কৌশলটি হ'ল মভেনকে ১.7 এর জন্য সংকলন করতে সত্যিই সক্ষম করে তোলে যা আপনার বর্তমান জাভা সংস্করণটি আলাদা হলে খুব তুচ্ছ নয় ...
সের্গেই উশাকভ

যে অন্যান্য প্রশ্ন হল stackoverflow.com/questions/16723533/...
পল Verest

14

আমি বলি যে আপনি JAVA_HOMEপ্যাসকালের মতো পরিবেশ পরিবর্তনশীল সেটআপ করছেন : সাইগউইনে আপনি যদি শ্যাশ হিসাবে বাশ ব্যবহার করেন তবে:

export JAVA_HOME=/cygdrive/c/pathtothejdk

এটি পরিবেশের পরিবর্তনশীল জাভা ডিরেক্টরিটির পথটি প্রিপেন্ড করতে কখনই ক্ষতি করে না :binPATH

export PATH=${JAVA_HOME}/bin:${PATH}

maven-enforce-pluginসঠিক জেডিকে ব্যবহার করা হয়েছে তা নিশ্চিত করতে যুক্ত করুন । এটি আপনার পোমের জন্য একটি ভাল অনুশীলন।

<build>
 <plugins>
   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <executions>
        <execution>
          <id>enforce-versions</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireJavaVersion>
                <version>1.6</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

দয়া করে, ম্যাভেন এনফোসার প্লাগইন - ব্যবহার দেখুন


1
এটি জেডিকে-র সঠিক সংস্করণ নির্দিষ্ট করার জন্য উপযুক্ত । উদাহরণস্বরূপ, আমার কাছে একটি প্রকল্প রয়েছে যা প্রাথমিক জেডিকে ১.৮ ব্যবহার করার সময় ব্যর্থ হয়, তবে জেডিকে ১.৮.০_77 using ব্যবহার করা হলে এটি ঠিক কাজ করে। আমি উভয়টি জেডিকে ইনস্টল করে রেখেছি এবং এই সমাধানটির সাহায্যে মাভেন আমাকে বলেছিলেন যে আমি নির্দিষ্ট 1.8.0_77 ফোল্ডারটিকে লক্ষ্য হিসাবে আমার জাভাআহোম পথ পরিবর্তন না করা পর্যন্ত আমি 1.8 এর ভুল সংস্করণটি ব্যবহার করছি। অন্যান্য উত্তরগুলি আপনাকে সংস্করণে এত দানাদার হতে দেয়নি।
বোজিংগো

13

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

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

1
এই রেখাগুলি যুক্ত করার পরে একটি ম্যাভেন আপডেটের প্রয়োজন হতে পারে (গ্রহন: প্রকল্পটিতে রাইট ক্লিক করুন, মাভেন, আপডেট প্রকল্প)
রোমানো

Maven.compiler বৈশিষ্ট্য সেট করা জাভা ১১-এ যুক্ত পদ্ধতি ব্যবহার করে কোডটি বাধা দেয় না উদাহরণস্বরূপ String.repeat ()। এটি যখন জেডিকে ১১ দিয়ে নির্মাণ করা হচ্ছে তাই
মেকেনটি

6

ম্যাভেন চূড়ান্ত জাভা কমান্ড হিসাবে ভেরিয়েবল A জাভ্যাকএমডি ব্যবহার করে, এটি জাভা নির্বাহযোগ্য যেখানে বিভিন্ন জেডিকে মেভেন পরিবর্তন করবে to


ধন্যবাদ বন্ধু, 10 ঘন্টা ব্যয় করার পরে আমরা আপনার উত্তরের সাহায্যে স্থির করেছি।
মুকুল_3062

3

হাডসন আপনাকে বেশ কয়েকটি জাভা রানটাইম সংজ্ঞায়িত করার অনুমতি দেয় এবং আপনাকে এর মধ্যে একটি দিয়ে মাভেনকে অনুরোধ করতে দেয়। কনফিগারেশন পৃষ্ঠাতে নিবিড় নজর দিন।


ওপি কমান্ড লাইনে একটি হডসন প্লাগইন তৈরি করছে, হডসনের অধীনে নয় (অন্তত, এটি আমার বোঝার জন্য)।
পাসক্ল থিভেন্ট

3

আপনি যদি জাভা ইনস্টল করে brewথাকেন Macতবে আপনার জাভা হোম ডিরেক্টরিটি এখানে পাবেন:

/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

এখন পরবর্তী পদক্ষেপটি Java Homeহ'ল ডিরেক্টরি মেভেন কোন দিকে নির্দেশ করছে তা সন্ধান করা। এটি জানতে কমান্ডটি টাইপ করুন:
mvn -version

এখানে চিত্র বর্ণনা লিখুন

আমরা এখানে ক্ষেত্রগুলি আগ্রহী: Java versionএবং runtime

মাভেন বর্তমানে ইশারা করছেন Java 13। এছাড়াও, আপনি কী রানটাইমের নীচে জাভা হোম পাথটি দেখতে পাচ্ছেন, যা হ'ল:
/usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home

ম্যাভেনের জাভা সংস্করণটি পরিবর্তন করতে, আমাদের Java 8হোম পাথটি JAVA_HOMEএনভির ভেরিয়েবলে যুক্ত করতে হবে।

এটি করতে আমাদের কমান্ডটি চালাতে হবে:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home টার্মিনালে।

এখন যদি আমরা মভেন সংস্করণটি পরীক্ষা করি তবে আমরা দেখতে পাচ্ছি যে এটি এখন জাভা 8-এ নির্দেশ করছে।

এখানে চিত্র বর্ণনা লিখুন

সমস্যাটি হ'ল যদি আপনি নতুন টার্মিনালে আবার মাভেন সংস্করণটি পরীক্ষা করেন, আপনি দেখতে পাবেন এটি জাভা 13 এর দিকে নির্দেশ করছে this এটি এড়াতে আমি ফাইলটিতে JAVA_HOMEভেরিয়েবল যুক্ত করার পরামর্শ দেব ~/.profile

এইভাবে যখনই আপনার টার্মিনালটি লোড হচ্ছে এটি ডিফল্টভাবে জাভাআহোমে সংজ্ঞায়িত মানটি গ্রহণ করবে। এই ~/.profileফাইলটি আপনাকে যুক্ত করতে হবে:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

আপনি একটি নতুন টার্মিনাল খুলতে পারেন এবং ম্যাভেন সংস্করণটি পরীক্ষা করতে পারেন ( mvn -version) এবং আপনি এটি দেখতে পাবেন যে এটি এবার জাভা 8-এ নির্দেশ করছে।


0

উইন্ডোজ on-এ গ্রিপসের মধ্যে মেভেনের সাথে আমার সমস্যা তৈরি হয়েছিল।

যদিও আমি দেখেছি mvn বিল্ডটি কমান্ড লাইন থেকে ঠিক সূক্ষ্ম চলছে।

mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml   > output.log

গ্রহণটি JDK এর পরিবর্তে ডিফল্ট JVM কে একটি JRE ইনস্টলেশন হিসাবে বিবেচনা করছিল তাই এটি সংকলনে ব্যর্থ হয়েছিল on

আমি নিম্নলিখিত লাইনে eclipse.ini এ যুক্ত করেছি:

-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin

গ্রহন থেকে শুরু করার সময় আমি নীচের তালিকার "লক্ষ্য" বিভাগে ব্যবহার করেছি:

-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml

সংকলনের ত্রুটি সমাধান হয়েছে।


0

জাভা 9 এর জন্য:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>9</source>
                <target>9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

0

তবুও একাধিক jdk সংস্করণ পরিচালনার জন্য আরেকটি বিকল্প হ'ল jEnv

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

jenv local 1.6

আপনি এমভিএন প্লাগইন সক্ষম করার পরে এটি স্থানীয়ভাবে এমভিএনকে সেই সংস্করণটি ব্যবহার করবে:

jenv enable-plugin maven

0

আপনি নিজের হোম ডিরেক্টরিতে একটি ফাইলে মাভেনের জন্য জেডিকে সেট করতে পারেন ~/.mavenrc:

JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home'

এই এনভায়রনমেন্ট ভেরিয়েবলটি এমভিএন স্ক্রিপ্ট দ্বারা পরীক্ষা করা হবে এবং উপস্থিত থাকাকালীন ব্যবহার করা হবে:

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

https://github.com/CodeFX-org/mvn-java-9/tree/master/mavenrc

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