سؤال

أحاول إنشاء مكون إضافي من Hudson قمت بتعديله ويتطلب JDK1.6. هذا جيد ، لكنني لا أرى كيف يمكنني إخبار Maven أين يوجد JDK المختلفة. لقد وجدت القليل من الإشارات على الإنترنت ولكن لا يبدو أنها تنطبق علي. يقترح البعض إضافة بعض التكوين إلى .m2/settings.xml لكن ليس لدي ملف settings.xml. بالإضافة إلى ذلك ، لا أريد استخدام 1.6 لجميع بنيات Maven.

kink واحد هو أنا أستخدمه mvn في Cygwin ، إذا كان هذا يهم على الإطلاق. يبدو أنني يجب أن أكون قادرًا على إجراء المواصفات في ملف Project POM ، لكن POM الحالية عارية.

خلاصة القول هي ، هل هناك طريقة لتحديد JDK لاستدعاء واحد من Maven؟

هل كانت مفيدة؟

المحلول

خلاصة القول هي ، هل هناك طريقة لتحديد JDK لاستدعاء واحد من Maven؟

تغيير مؤقتا الخاص بك JAVA_HOME.

نصائح أخرى

يبدو أن Maven يعطي الآن حلاً هنا: تجميع المصادر باستخدام JDK مختلفة

دعنا نقول JAVA_HOME تشير إلى JDK7 (والتي ستقوم بتشغيل عمليات 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, ، سيكون POM الخاص بك مستقلة منصة:

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

ترجمة: ترجمة لديها خاصية المستخدم يسمح لك بتحديد مسار إلى 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

أنظر أيضا أسبقية خصائص مافن مخصصة.

كما قلت: "زائد ، لا أريد استخدام 1.6 لجميع بنيات Maven." .... أفضل ، سأقول تعديل ملف POM الخاص بك وتحديد إصدار 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.

أقول إنك تقوم بإعداد java_home مثل Pascal يقول: في cygwin إذا كنت تستخدم Bash لأن قذيفة يجب أن تكون "تصدير java_home =/cygdrive/c/pathtothejdk = $ {java_home}/bin: $ {path} "

وأضف أيضًا Maven-Enforce-Plugin للتأكد من استخدام JDK الصحيح. هذه ممارسة جيدة ل POM الخاص بك.

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

http://maven.apache.org/plugins/maven-enforcer-plugin/usage.html

أنا أعلم أنه موضوع قديم. لكنني كنت أواجه بعض المشكلات مع شيء مشابه لهذا في Maven for Java 8 Compiler Source. لقد اكتشفت هذا بإصلاح سريع مذكور في هذه المقالة اعتقدت أنه يمكنني وضعه هنا وربما يمكنني مساعدة الآخرين:

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

يستخدم Maven متغير $ javacmd كأمر Java النهائي ، وقام بتعيينه على المكان الذي سيتم تنفيذ Java القابلة للتنفيذ إلى Maven إلى JDK مختلف.

يسمح لك Hudson أيضًا بتحديد العديد من أوقات تشغيل Java ، والسماح لك بالاستدعاء Maven مع واحد من هذه. إلقاء نظرة فاحصة على صفحة التكوين.

لجافا 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>

لقد قمت ببناء مشكلة مع Maven داخل Eclipse على Windows 7.

على الرغم من أنني لاحظت أن MVN Build كان يعمل بشكل جيد من سطر الأوامر.

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

كان Eclipse يعتبر التثبيت الافتراضي JVM A JRE بدلاً من JDK ، لذا فقد فشل في التجميع.

أضفت إلى Eclipse.ini السطر التالي:

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

أيضًا عند البدء من Eclipse ، استخدمت في قسم "الأهداف" التالية:

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

تم حل خطأ التجميع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top