exec-maven-plugin: могу ли я запустить exec: exec goal без предварительного запуска toolchains: toolchain goal?

#java #maven #toolchain #maven-exec-plugin

#java #maven #maven-exec-plugin #maven-toolchains-плагин

Вопрос:

Я унаследовал приложение, которое компилируется и запускается только на Java 1.8. Поскольку я не хочу делать Java 1.8 основной jvm на моей машине, я почувствовал, что лучший способ справиться с этим — использовать цепочки инструментов Maven. Настройка плагина maven-compiler-plugin была довольно простой, но я также хочу добавить возможность запуска службы через Maven, чтобы воспользоваться преимуществами набора инструментов, который я настроил для 1.8.

Проблема в том, что я, похоже, не могу заставить exec-maven-plugin использовать toolchain как задокументировано. Согласно документации, я бы подумал, что exec-maven-plugin будет использовать maven-toolchains-plugin по мере необходимости. Однако для того, чтобы exec:exec использовать правильный набор инструментов, я должен использовать:

mvn toolchains:toolchain exec:exec

Это работает, но документация наводит меня на мысль, что набор инструментов будет настроен автоматически без необходимости выполнения toolchains:toolchain цели.

pom.xml

 <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-toolchains-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>toolchain</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <toolchains>
          <jdk>
            <version>1.8</version>
          </jdk>
        </toolchains>
      </configuration>
    </plugin>
        
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <configuration>
        <executable>java</executable>
        <arguments>
          <argument>-classpath</argument>
          <classpath></classpath>
          <argument>com.my.Main</argument>
        </arguments>
      </configuration>
    </plugin>
  </plugins>
</build>
  

toolchains.xml

 <?xml version="1.0" encoding="UTF8"?>
<toolchains>
  <toolchain>
    <type>jdk</type>
    <provides>
      <id>1.8</id>
      <version>1.8</version>
    </provides>
    <configuration>
      <jdkHome>/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
</toolchains>
  

Дополнительное примечание: я также попытался настроить exec-maven-plugin для запуска exec:java со следующей конфигурацией:

 <configuration>
  <mainClass>com.my.Main</mainClass>
</configuration>
  

Однако это не работает, даже с mvn toolchains:toolchain exec:java .

Есть ли способ настроить это так, чтобы мне нужно было только запускать mvn exec:exec или mvn exec:java ?

Ответ №1:

Я думаю, ответ заключается в том, что вы должны убедиться, что сам toolchains плагин является частью вашей сборки. Или это то, что, похоже, говорится в соответствующей документации. (Я вижу, что у вас это есть; я говорю, что да, это необходимо.)

Комментарии:

1. Не тот ответ, который я хотел, но, похоже, это правильный ответ. 🙂