Я пытаюсь создать модифицированный мной плагин Hudson, и для него требуется jdk1.6. Это нормально, но я не понимаю, как я могу сказать maven, где находится другой jdk. Я нашел несколько упоминаний в Интернете, но, похоже, они не относятся ко мне. Некоторые предлагают добавить конфигурацию, .m2/settings.xml
но у меня нет файла settings.xml
. Кроме того, я не хочу использовать 1.6 для всех сборок maven.
Один изгиб - я использую mvn
в cygwin, если это вообще имеет значение. Похоже, я смогу сделать спецификацию в файле pom проекта, но существующий pom довольно прост.
Итак, суть в том, есть ли способ указать jdk для одного вызова maven?
set JAVA_HOME="C:\Java\jdk7"
JAVA_HOME
можно установить для Maven (по крайней мере, на Mac) в этом файле:/private/etc/mavenrc
- И это может использовать что-то вроде (обратите внимание на обратные кавычки, а не одинарные кавычки!):export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_75`
export JAVA_HOME='D:/dev/java/jdk8/jre'
(у меня работает)java -version
, он все равно распечатает предыдущую версию.Кажется, что 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>
источник
-Dmaven.compiler.fork=true
и-Dmaven.compiler.executable=/path/to/target/javac
в командной строке.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
переменную. Например (в оболочке bash):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
Как вы сказали: «Кроме того, я не хочу использовать 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
переменную среды, как говорит Паскаль: в Cygwin, если вы используете bash в качестве оболочки, должна быть:export JAVA_HOME=/cygdrive/c/pathtothejdk
Никогда не помешает также добавить
bin
путь к каталогу java кPATH
переменной среды с помощью: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>
См. Плагин Maven Enforcer - Использование .
источник
Я знаю, что это старая ветка. Но у меня были некоторые проблемы с чем-то похожим на это в исходном коде компилятора Maven для Java 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>
источник
Maven использует переменную $ JAVACMD в качестве последней команды java, установите ее там, где исполняемый файл java переключит maven на другой JDK.
источник
Если вы установили Java через
brew
вMac
то скорее всего , вы найдете Java Домашний каталог здесь:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
Следующим шагом теперь будет поиск
Java Home
каталога, на который указывает maven. Чтобы найти его, введите команду:mvn -version
Здесь нас интересуют следующие поля:
Java version
иruntime
.Maven в настоящее время указывает на
Java 13
. Кроме того, вы можете увидеть домашний путь Java под ключевой средой выполнения, а именно:/usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
Чтобы изменить Java-версию maven, нам нужно добавить
Java 8
домашний путь кJAVA_HOME
переменной env.Для этого нам нужно запустить команду:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
в терминале.Теперь, если мы проверим версию maven, мы увидим, что теперь она указывает на Java 8.
Проблема в том, что если вы снова проверите версию maven в новом терминале, вы обнаружите, что она указывает на Java 13. Чтобы избежать этого, я бы предложил добавить
JAVA_HOME
переменную в~/.profile
файл.Таким образом, всякий раз, когда ваш терминал загружается, он по умолчанию будет принимать значение, которое вы определили в JAVA_HOME. Это строка, которую вам нужно добавить в
~/.profile
файл:export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
Вы можете открыть новый терминал и проверить версию Maven (
mvn -version
), и вы обнаружите, что на этот раз он указывает на Java 8.источник
Hudson также позволяет вам определять несколько сред выполнения Java и вызывать Maven с одной из них. Присмотритесь к странице конфигурации.
источник
Еще одна альтернатива для управления несколькими версиями jdk - jEnv
После установки вы можете просто изменить версию java «локально», то есть для конкретного каталога проекта:
jenv local 1.6
Это также заставит mvn использовать эту версию локально, когда вы включите плагин mvn:
источник
У меня возникла проблема со сборкой maven в Eclipse в Windows 7.
Хотя я заметил, что сборка mvn отлично работает из командной строки.
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 по умолчанию установку JRE вместо JDK, поэтому при компиляции он терпел неудачу.
Я добавил в 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
Ошибка компиляции решена.
источник
Для 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>
источник
Вы также можете установить JDK для Maven в файле в своем домашнем каталоге
~/.mavenrc
:JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home'
Эта переменная среды будет проверяться сценарием mvn и использоваться при ее наличии:
if [ -f "$HOME/.mavenrc" ] ; then . "$HOME/.mavenrc" fi
https://github.com/CodeFX-org/mvn-java-9/tree/master/mavenrc
источник
Использование этой команды ниже также сработало для меня, используя ее сразу после установки Java 8 отсюда https://www.oracle.com/java/technologies/javase-downloads.html
export JAVA_HOME=$(/usr/libexec/java_home)
источник