意识到这是一个糟糕的主意,我正在寻找一种方法,可以在Maven构建过程中更改插件执行的类路径。
TL; DR:我们有一个Java 8项目,但是它必须执行到我们要从中迁移的Java 6环境中。目标是建立一个程序集jar,其中某些依赖项将被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个操作:
我的第一个想法是依靠maven-assembly-plugin
,并且看一下它的配置,看来有可能在最终的jar中包含几个文件夹,并排除依赖项本身。
现在我的方法是:
maven-dependency-plugin
的依赖项提取到target
文件夹中,例如target/dependencies
retrolambda
应用于target/classes
和target/dependencies
package
生命周期通过配置maven-assembly-plugin
您可能已经注意到了,但是在执行步骤3时, retrolambda在执行时的类路径中不会有target/dependencies
,因此它会失败。
我正在寻找一种修改提供给插件的类路径以添加target/dependencies
有没有办法实现这种行为?