Файл Pom не считывает переменные среды

#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. Хорошо, большое вам спасибо за вашу помощь. Я проверю это.