Сознавая, что это ужасная идея, Я ищу способ изменить путь к классу при выполнении плагина во время сборки Maven.
TL; DRУ нас есть проект Java 8, но он должен выполняться в среде Java 6, из которой мы осуществляем миграцию.Цель состоит в том, чтобы создать сборочный файл с некоторыми зависимостями, перезаписанными и перестроенными с помощью retrolambda
.
Мыслительный процесс
Для целей тестирования я настроил maven-dependency-plugin
для извлечения этих зависимостей впапку target/classes
, запустите retrolambda
над ними, а затем package
целиком в специальный сборочный сосуд, и это сработало!
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>process-classes</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>**/*.class</includes>
<excludes>**/*.properties</excludes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</plugin>
<plugin>
<groupId>net.orfjackal.retrolambda</groupId>
<artifactId>retrolambda-maven-plugin</artifactId>
<version>2.5.5</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>process-main</goal>
<goal>process-test</goal>
</goals>
</execution>
</executions>
<configuration>
<target>1.6</target>
<mainInputDir>${project.build.outputDirectory}</mainInputDir>
<mainOutputDir>${project.build.outputDirectory}</mainOutputDir>
<defaultMethods>true</defaultMethods>
</configuration>
</plugin>
Теперь я хотел бы разделить это на 2 операции:
- Одна, которая создает JAR-файл только с зависимостями проекта
- Тот же JAR-файл сборкиЯ построил до
Моей первой мыслью было положиться на maven-assembly-plugin
, и, глядя на его конфигурацию, представляется возможным включить несколько папок в финальную флягу и исключить саму зависимость от .
Теперь мой подход будет следующим:
- Скомпилируйте классы проекта
- Извлеките зависимости с помощью
maven-dependency-plugin
в папку target
, например, target/dependencies
- Примените
retrolambda
к обоим target/classes
и target/dependencies
- Используйте
package
жизненный цикл для производства моих обоих банок, настроив maven-assembly-plugin
Возможно, вы уже заметили, но при выполнении шага 3, retrolambda не будет иметь target/dependencies
в пути к классам во время его выполнения , поэтому он не работает.
Что япоиск способа изменения пути к классам, предоставляемого плагину, для добавления target/dependencies
Есть ли способ добиться такого поведения?