#java #maven #ant
#java #maven #ant
Вопрос:
Обновить:
Если я изменю $ {env.JAVA_HOME} на системное свойство $ {java.home}, то он выполнит задачи распаковки и копирования maven-dependency-plugin. Но теперь он терпит неудачу в maven-antrun-plugin:1.8:run (build-content).
[ERROR] one of its dependencies could not be resolved: Could not find artifact ... at specified path ... -> [Help 1]
Почему он ищет мои файлы jar в папке JRE?
/{path to jdk}/Contents/Home/jre/lib/...
Он сидит прямо здесь:
/{path to jdk}/Contents/Home/lib
Мой pom.xml файл не читает мою переменную среды JAVA_HOME. Я на Mac. Вот запись:
<dependencies>
<dependency>
<groupId>{groupId}</groupId>
<artifactId>{artifactId}</artifactId>
<version>${version}</version>
<scope>system</scope>
<systemPath>${env.JAVA_HOME}/lib/myPersonalJar.jar</systemPath>
</dependency>
</dependencies>
Вот ошибка:
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] 'build.plugins.plugin[org.apache.maven.plugins:maven-antrun-plugin].dependencies.dependency.systemPath' for ... must specify an absolute path but is ${env.JAVA_HOME}/lib/myPersonalJar.jar
В приложении iTerm я могу повторить $ JAVA_HOME, и он указывает на нужное место.
Он отлично работает, когда я жестко задаю системный путь к моему Java home. Я не могу понять, почему. Чтобы дать некоторый контекст, мои файлы сборки ant также не читают мои переменные среды.
Я пропустил что-то глупое простое?
Комментарии:
1. Конечно, JAVA_HOME явно задан в вашей среде? Какую версию / дистрибутив Java вы используете? У многих JRE есть подкаталог JDK. Итак, похоже, что ваш JAVA_HOME устанавливается в /{путь к jdk}/Contents/Home/jre вместо /{путь к jdk}/Contents/Home .
2. jre является подкаталогом jdk. и JAVA_HOME отображается правильно как: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home . Но изначально это не сбой, как раньше. Он проходит начальную ошибку, начинает добавлять зависимости, а затем завершается сбоем. Похоже, что эта проблема вызвана зависимостью.
3. да, ваше обновленное редактирование показывает, что Maven ищет инструменты. jar в 1.7, но ваш JAVA_HOME равен 1.8 (и находится в подкаталоге jre). Я опубликую профиль, который я использовал для добавления зависимости как для сборок, так и для antrun.
4. Интересно. Если я посмотрю в настройках конкретного проекта -> компилятор java, уровень соответствия равен 1.7. Это то, что является причиной этого?
5. Определенно есть что-то неправильное, плюс antrun привередлив.
Ответ №1:
Попробуйте добавить этот профиль в свой pom.xml
(в <profiles/>
):
<profile>
<id>tools.jar</id>
<activation>
<file><exists>${java.home}/../lib/tools.jar</exists></file>
</activation>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>jdk</groupId>
<artifactId>tools</artifactId>
<version>${java.specification.version}</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>jdk</groupId>
<artifactId>tools</artifactId>
<version>${java.specification.version}</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<docletPath>${tools.jar}</docletPath>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
Я включил соответствующее изменение в подключаемый модуль javadoc, который может быть или
не быть полезным для вас. Вы можете удалить его, если он вам не нужен.
Комментарии:
1. Да, это все еще не работает. Он выдает предупреждение перед задачей распаковки. Он все еще ищет в папке JRE, и я не знаю почему: ‘build. Плагины. плагин[org.apache.maven.plugins:maven-antrun-plugin].dependencies.dependency.systemPath’ для com.sun:tools:jar ссылается на несуществующий файл /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/tools.jar
2. Вы удалили свою
com.sun:tools
зависимость после добавления профиля?3. Вы правы, это действительно работает. Но почему? Теперь он застревает при попытке загрузить Apache Ivy: [echo] ivy.home — это $ {env.USERPROFILE}/ivy. Еще одна проблема с переменной среды. Должно быть что-то большее.
4. Переменные среды mvn не передаются в вызов ant. Вам нужна стратегия для распространения этих значений через свойства. Если ваши задачи ant выражаются в build.xml затем вы можете рассмотреть возможность использования Ant-задач Maven Artifact Resolver для доступа к свойствам POM.
5. Хорошо, большое вам спасибо за вашу помощь. Я проверю это.