在Maven插件中打包JAR

时间:2019-08-28 18:29:55

标签: java maven

我有一个maven插件,该插件具有依赖关系,需要将其打包在其中(出于某种原因)。因此,我建立了依赖关系,输出了一个JAR,然后将其安装到目标插件项目中。通过安装,我包括了哈希和其他Maven文件,以确保正确地将其拉入。像这样:

<plugin>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>additional-install</id>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <createChecksum>true</createChecksum>
                <version>${project.version}</version>
                <groupId>${project.groupId}</groupId>
                <packaging>${project.packaging}</packaging>
                <artifactId>${project.artifactId}</artifactId>
                <file>${project.build.directory}/${project.build.finalName}.jar</file>
                <localRepositoryPath>${project.basedir}/../target-maven-plugin/src/main/resources/libs/repo</localRepositoryPath>
            </configuration>
        </execution>
    </executions>
</plugin>

如您所见,它被放置在目标项目的资源目录中。我不想复制代码,因为这是另一个内部维护项目的分支,并且不想移动/更新所有代码和测试-我只是重命名了路径。

在目标项目中,我创建一个存储库,然后通过本地存储库使用它:

<repositories>
    <repository>
        <id>TargetMavenPluginInternalRepo</id>
        <url>file:${project.basedir}/src/main/resources/libs/repo</url>
    </repository>
</repositories>

然后我将其包括为依赖项:

<!-- This is a JAR which is located in the libs/ directory. -->
<dependency>
    <groupId>com.company.needed</groupId>
    <artifactId>dependency</artifactId>
    <version>${dependency.version}</version>
</dependency>

该项目将按预期的方式构建和安装。该插件将安装到目标Maven插件本地存储库中,并自行构建/运行更正。

但是,如果我尝试通过下游项目运行插件,则会失败,因为使用目标Maven插件的下游项目无法找到该依赖项。这很有道理。我可以看到Maven试图解决依赖关系:

Downloading from central: https://repo.maven.apache.org/maven2/com/company/needed/1.1/dependency-1.1.jar
Downloading from TargetMavenPluginInternalRepo: file:${project.basedir}/src/main/resources/libs/repo/com/company/needed/dependency/1.1/dependency-1.1.jar

所以我继续尝试一些事情,例如将依赖项复制到目标jar中,然后尝试将其添加到类路径中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>${maven.plugin.version}</version>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <artifactItems>
            <artifactItem>
                <groupId>com.company.needed</groupId>
                <artifactId>dependency</artifactId>
                <version>${dependency.version}</version>
                <type>jar</type>
                <overWrite>true</overWrite>
                <outputDirectory>${project.build.directory}/libs</outputDirectory>
            </artifactItem>
        </artifactItems>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>${maven.plugin.version}</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>libs/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

这似乎是完成此任务的漫长之路。我的同事建议我只是将代码复制过来,但是我喜欢将其保存在外部,因此更易于维护,因此可以更轻松地引入更新。

有什么想法吗?这有可能吗?我不想在外部发布此内部维护的依赖项。

0 个答案:

没有答案