Укажите JDK для использования Maven
Я пытаюсь построить плагин Hudson, который я изменил, и для этого требуется jdk1.6. Это нормально, но я не вижу, как я могу сказать maven, где находится другой jdk. Я нашел несколько упоминаний в интернете, но они, похоже, не относятся ко мне. Некоторые предлагают добавить некоторые конфигурации в .m2/settings.xml но у меня нет settings.xml. Кроме того, я не хочу использовать 1.6 для всех сборок maven.
один излом я использую mvn в Cygwin, если это вообще имеет значение. Похоже, я должен быть в состоянии сделать спецификация в файле проекта pom, но существующий pom довольно голый.
Итак, суть в том, есть ли способ указать jdk для одного вызова maven?
10 ответов:
Итак, суть в том, есть ли способ указать 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>
Как вы сказали " плюс, я не хочу использовать 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.
compile: compile и свойства пользователя что позволяет указать путь к
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см. также приоритет пользовательских свойств Maven.
Я говорю, что вы устанавливаете JAVA_HOME, как говорит Паскаль: В cygwin если вы используете bash в качестве оболочки должно быть " экспорт JAVA_HOME= / cygdrive/c / pathtothejdk" И это никогда не вредит также экспортировать java bin dir в путь с "export PATH=${JAVA_HOME}/bin:${PATH}"
а также добавьте Maven-enforce-plugin, чтобы убедиться, что используется правильный jdk. Это хорошая практика для вашего ПФЛ.
<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 для 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 с одним из них. Более подробно смотрите на странице конфигурации.
Для Java 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.logEclipse рассматривал как JVM по умолчанию установку 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ошибка компиляции решена.
Comments