8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Joshua 1月前

57 0

Maven 2 在开发的实验/快速而粗糙的模型阶段让我抓狂。我有一个 pom.xml 文件,它定义了我想要使用的 web 应用程序框架的依赖项,一个……

Maven 2 在开发的实验/快速而粗糙的模型阶段让我抓狂。

我有一个 pom.xml 文件,它定义了我想使用的 Web 应用框架的依赖项,我可以从该文件快速生成入门项目。但是,有时我想链接到尚未定义文件的第三方库 pom.xml ,因此,与其 pom.xml 手动创建第三方库的文件并安装它,然后将依赖项添加到我的 pom.xml ,我只想告诉 Maven:\“除了我定义的依赖项之外, /lib 还包括其中的任何 jar。\”

这看起来应该很简单,但如果是这样,我就忽略了一些东西。

任何关于如何做到这一点的指示都将不胜感激。除此之外,如果有一个简单的方法可以将 maven 指向一个 /lib 目录,并轻松创建一个 pom.xml 将所有附带的 jar 映射到单个依赖项的目录,然后我可以一次性命名/安装并链接到该目录,这也就足够了。

帖子版权声明 1、本帖标题:我可以将 jar 添加到 Maven 2 构建类路径而不安装它们吗?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Joshua在本站《maven》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 流行方法的问题

    您在互联网上找到的大多数答案都会建议您将依赖项安装到本地存储库,或者在其中指定 \'system\' 范围, pom 并将依赖项与项目源一起分发。但这两种解决方案实际上都是有缺陷的。

    为什么你不应该采用“安装到本地存储库”方法

    当您将依赖项安装到本地存储库时,它会保留在那里。只要您的分发工件可以访问此存储库,它就可以正常工作。问题是,在大多数情况下,此存储库将驻留在您的本地计算机上,因此无法在任何其他计算机上解决此依赖关系。显然,让您的工件依赖于特定机器并不是解决问题的方法。否则,必须在使用该项目的每台机器上本地安装此依赖项,这并不是更好的选择。

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

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

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

    将其放入您的 pom

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

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

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

    要详细阐述这一点,你可以阅读 此博客文章 .

    使用 Maven 安装到项目仓库

    我建议不要手动创建此结构,而是使用 Maven 插件将您的 jar 安装为工件。因此,要将工件安装到 repo 文件夹下的项目内存储库,请执行:

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

    如果您选择这种方法,您将能够将存储库声明简化为 pom

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

    帮助脚本

    由于执行每个库的安装命令有点烦人,而且肯定容易出错,所以我创建了一个 实用程序脚本 ,它会自动将文件夹中的所有 jar 安装 lib 到项目存储库,同时自动从文件名称解析所有元数据(groupId、artifactId 等)。该脚本还会打印出依赖项 xml,供您复制粘贴到您的 pom .

    在目标包中包含依赖项

    当您创建项目内的存储库时,您将解决使用其源分发项目依赖项的问题,但从那时起,您的项目的目标工件将依赖于未发布的 jar,因此当您将其安装到存储库时,它将具有无法解析的依赖项。

    为了解决这个问题,我建议将这些依赖项包含在目标包中。您可以使用 Assembly 插件 或更好的 OneJar 插件 。OneJar 的官方文档很容易理解。

返回
作者最近主题: