修改类路径以在Maven中执行单个插件

时间:2018-10-18 03:05:58

标签: java maven

意识到这是一个糟糕的主意,我正在寻找一种方法,可以在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个操作:

  • 仅使用项目依赖项构建jar的人
  • 我之前构建的同一装配罐

我的第一个想法是依靠maven-assembly-plugin,并且看一下它的配置,看来有可能在最终的jar中包含几个文件夹,并排除依赖项本身

现在我的方法是:

  1. 编译项​​目类
  2. maven-dependency-plugin的依赖项提取到target文件夹中,例如target/dependencies
  3. retrolambda应用于target/classestarget/dependencies
  4. 使用package生命周期通过配置maven-assembly-plugin
  5. 来生产我的两个罐子

您可能已经注意到了,但是在执行步骤3时, retrolambda在执行时的类路径中不会有target/dependencies,因此它会失败。

我正在寻找一种修改提供给插件的类路径以添加target/dependencies

的方法。

有没有办法实现这种行为?

0 个答案:

没有答案