我有一个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>
这似乎是完成此任务的漫长之路。我的同事建议我只是将代码复制过来,但是我喜欢将其保存在外部,因此更易于维护,因此可以更轻松地引入更新。
有什么想法吗?这有可能吗?我不想在外部发布此内部维护的依赖项。