Изменить classpath для одиночного исполнения плагина в Maven - PullRequest
0 голосов
/ 18 октября 2018

Сознавая, что это ужасная идея, Я ищу способ изменить путь к классу при выполнении плагина во время сборки 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, и, глядя на его конфигурацию, представляется возможным включить несколько папок в финальную флягу и исключить саму зависимость от .

Теперь мой подход будет следующим:

  1. Скомпилируйте классы проекта
  2. Извлеките зависимости с помощью maven-dependency-plugin в папку target, например, target/dependencies
  3. Примените retrolambda к обоим target/classes и target/dependencies
  4. Используйте package жизненный цикл для производства моих обоих банок, настроив maven-assembly-plugin

Возможно, вы уже заметили, но при выполнении шага 3, retrolambda не будет иметь target/dependencies в пути к классам во время его выполнения , поэтому он не работает.

Что япоиск способа изменения пути к классам, предоставляемого плагину, для добавления target/dependencies

Есть ли способ добиться такого поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...