我可以添加jars到maven 2构建类路径而不安装它们吗?

问题:

Maven2在实验/快速和肮脏的模型开发阶段使我疯狂。
我有一个pom.xml文件定义了我想要使用的Web应用程序框架的依赖关系,我可以从该文件快速生成启动项目。然而,有时我想链接到尚未定义pom.xml文件的第三方库,所以不是手动为第三方库创建pom.xml文件并进行安装,而是将依赖关系添加到我的pom.xml,我只想告诉Maven:“除了我定义的依赖项之外,还包括/lib中的任何jar。
似乎这应该是简单的,但如果是,我错过了一些东西。
任何关于如何做到这一点的指针都非常感激。简而言之,如果有一个简单的方式将maven指向/lib目录,并轻松创建一个pom.xml,所有封闭的jar映射到一个依赖关系,我可以命名/安装并链接到一举也就足够了。

回答:

流行方法的问题

您在互联网上发现的大多数答案将建议您将依赖关系安装到本地存储库,或在pom中指定“系统”范围,并将依赖关系与项目源分配。但是这两种解决方案实际上都是有缺陷的。

为什么不应用“安装到本地回购”方法

当您将本地存储库安装到依赖关系时,它将保留在该位置。只要可以访问此存储库,您的分发工件就可以正常工作。在大多数情况下,该问题在这个存储库将驻留在本地计算机上,所以没有办法解决任何其他机器的依赖。明确地让你的工件依赖于一个特定的机器不是处理事情的一种方式。否则,这种依赖将必须在每个使用该项目的机器上本地安装,这不是更好。

为什么不应用“系统范围”的方法

您依赖于“系统范围”方法的jar不会被安装到任何存储库或附加到您的目标包中。这就是为什么您的分发包在使用时将无法解决该依赖关系的原因。我相信系统范围的使用甚至被淘汰的原因。无论如何,您不想依赖已弃用的功能。

静态项目内存储库解决方案

把它放在你的pom
class=”lang-xml prettyprint-override”>

<repository>
    <id>repo</id>
    <releases>
        <enabled>true</enabled>
        <checksumPolicy>ignore</checksumPolicy>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <url>file://${project.basedir}/repo</url>
</repository>

对于每个具有x.y.z形式的组ID的工件,Maven将在项目目录中的以下位置中搜索工件:

repo/
| - x/
|   | - y/
|   |   | - z/
|   |   |   | - ${artifactId}/
|   |   |   |   | - ${version}/
|   |   |   |   |   | - ${artifactId}-${version}.jar

要详细说明这一点,您可以阅读this blog post

使用Maven安装到项目回购

我建议用Maven插件来安装你的jar作为工件,而不是用手创建这个结构。因此,要在repo文件夹下将项目安装到项目库中,请执行以下操作:

mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

如果您选择这种方法,您可以将pom中的存储库声明简化为:
class=”lang-xml prettyprint-override”>

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/repo</url>
</repository>

辅助脚本

由于执行每个lib的安装命令有点恼人,绝对容易出错,我创建了一个utility script,它自动将所有的jar从lib文件夹安装到项目库,同时自动解析所有元数据(groupId,artifactId和等等)从文件的名称。该脚本还会打印出依赖关系xml,以便您复制粘贴到您的pom

在目标包中包含依赖项

当您创建项目内存储库时,您将解决使用源代码分发项目的依赖关系的问题,但此后,您的项目的目标工件将取决于未发布的jar,因此当您安装它到一个存储库,它将具有无法解决的依赖关系。
为了克服这个问题,我建议将这些依赖项包含在目标包中。你可以使用Assembly Plugin或更好的OneJar Plugin来做。 OneJar的官方文件很容易掌握。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Can I add jars to maven 2 build classpath without installing them?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 8 = 14