Подтвердить что ты не робот

JAVA_HOME получает искаженное Maven

Я модернизирую кучу существующих проектов 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"

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

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

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

4b9b3361

Ответ 1

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

maven-antrun-plugin запускает ant с JAVA_HOME, установленным в подкаталог jre JDK, даже если JAVA_HOME для общего прогона является JDK.  В другом месте есть документация о том, как создать зависимость на уровне проекта для JDK tools.jar, но это не помогает 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>

Ответ 2

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

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