JAVA_HOME искалечен Maven - PullRequest
       12

JAVA_HOME искалечен Maven

37 голосов
/ 07 января 2010

Я модернизирую кучу существующих Java-проектов с помощью унифицированной сборки Maven. Поскольку каждый проект является зрелым и имеет основанную на Ant сборку, я использую maven-antrun-plugin для выполнения существующего build.xml следующим образом:

        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <configuration>
                        <tasks>
                            <ant antfile="build.xml" target="compile" />
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Когда я запускаю mvn compile, сборка завершается с этим сообщением:

[INFO] An Ant BuildException has occured: The following error occurred 
       while executing  this line:
build.xml:175: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Java\jdk1.6.0_13\jre"

Что меня озадачивает, так это

  1. У меня есть JAVA_HOME=C:\Java\jdk1.6.0_13 как часть моей настройки среды, и когда выполняется mvn.bat, это именно то значение, которое я получаю, однако, как вы видите в сообщении об ошибке, оно выглядит как C:\Java\jdk1.6.0_13\jre
  2. Если я запускаю ant compile все компилируется просто отлично

Значит ли это, что, возможно, maven-antrun-plugin делает что-то вроде set JAVA_HOME=%JAVA_HOME%\jre? Я искал свои пакетные / сборочные файлы, я не могу найти, где происходит это изменение

Ответы [ 2 ]

21 голосов
/ 12 августа 2015

Это обратная сторона внешних ссылок в принятом ответе. Codehaus закрыли, и таким образом решение ушло. Для справки вот содержание ссылки - вам просто нужно скопировать блок <dependencies>...</dependencies> в ваш плагин antrun ...

Плагин maven-antrun-plugin запускает ant с JAVA_HOME, установленным в подкаталоге jre JDK, даже если JAVA_HOME для всего запуска является JDK. В другом месте есть документация о том, как создать зависимость на уровне проекта для tools.jar JDK, но это не помогает antrun, который является плагином. Следующий профиль делает работу. '..' в пути перемещается за каталог 'jre' к каталогу lib.

<profiles>
      <profile>
          <id>tools.jar</id>
          <build>
            <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <dependencies>
                <dependency>
                  <groupId>com.sun</groupId>
                  <artifactId>tools</artifactId>
                  <version>1.5.0</version>
                  <scope>system</scope>
                  <systemPath>${java.home}/../lib/tools.jar</systemPath>
                </dependency>
              </dependencies>
            </plugin>
            </plugins>
          </build>
      </profile>
16 голосов
/ 14 марта 2013

Мне удалось это исправить, поместив следующее определение свойства в мой файл ant build.xml:

<property name="build.compiler" value="extJavac"/>
...