Maven 2在开发的实验/快速和粗糙的模型阶段快把我逼疯了。

我有一个pom.xml文件,它定义了我想要使用的web-app框架的依赖关系,我可以从该文件快速生成启动项目。然而,有时我想链接到一个尚未定义pom.xml文件的第三方库,因此我不会手动为第三方库创建pom.xml文件并安装它,并将依赖项添加到我的pom.xml中,我只想告诉Maven:“除了我定义的依赖项之外,还包括/lib中的任何jar。”

似乎这应该是简单的,但如果是,我错过了一些东西。

任何关于如何做到这一点的建议都非常感谢。除此之外,如果有一种简单的方法将maven指向/lib目录,并轻松地创建一个pom.xml,将所有附带的jar映射到一个依赖项,然后我可以将其命名为/ install并链接到它,这也足够了。


当前回答

我发现了一个奇怪的解决办法:

使用Eclipse

创建简单的(非maven) Java项目 添加一个Main类 将所有罐子添加到类路径中 导出可运行JAR(这很重要,因为这里没有其他方法可以做到这一点) 选择将所需的库提取到生成的JAR中 决定牌照事宜 tadammm……将生成的jar安装到m2repo 将这个依赖项添加到其他项目中。

欢呼, Balint

其他回答

使用<scope>system</scope>是一个很糟糕的想法,其他人已经解释了原因,手动将文件安装到本地存储库将使构建不可复制,并且使用<url>file://${project. bat。basedir}/repo</url>也不是一个好主意,因为(1)它可能不是一个格式良好的文件url(例如,如果项目签出在一个包含不寻常字符的目录中),(2)如果这个项目的POM被用作其他项目的依赖项,结果是不可用的。

假设您不愿意将工件上传到公共存储库,Simeon建议使用助手模块来完成这项工作。但现在有一个更简单的方法……

建议

使用non-maven-jar-maven-plugin。完全符合您的要求,没有其他方法的任何缺点。

仅用于丢弃代码

设置scope == system,只需要创建groupId, artifactId和version

<dependency>
    <groupId>org.swinglabs</groupId>
    <artifactId>swingx</artifactId>
    <version>0.9.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/swingx-0.9.3.jar</systemPath>
</dependency>

注意:系统依赖关系不会复制到生成的jar/war中 (参见如何在使用maven构建的war中包含系统依赖项)

我找到了另一种方法来做到这一点,看看这里从Heroku的帖子

总结一下(抱歉有些复制和粘贴)

在根文件夹下创建一个repo目录:

yourproject
+- pom.xml
+- src
+- repo

运行这个命令将jar安装到本地的repo目录

mvn deploy:deploy-file -Durl=file:///path/to/yourproject/repo/ -Dfile=mylib-1.0.jar -DgroupId=com.example -DartifactId=mylib -Dpackaging=jar -Dversion=1.0

添加到你的pom.xml:

> <存储库 <!——其他存储库,如果有的话——> <库> <标识> project.local id > < / 项目<名称> < /名称> < url >文件:$ {project.basedir} /回购url > < / < /库> < /存储库> < >的依赖 com . example < / groupId < groupId > > < artifactId > mylib < / artifactId > 1.0 <版本> < /版本> < / >的依赖

这是我们添加或安装本地jar的方法

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>iamajar</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/iamajar.jar</systemPath>
    </dependency>

我给出了一些默认的groupId和artifactId,因为它们是强制性的:)

您可以在项目上创建本地存储库

例如,如果你在项目结构中有libs文件夹

在libs文件夹中创建目录结构:/groupId/artifactId/version/artifactId-version.jar 在pom.xml中,您应该注册存储库 <库> <标识> ProjectRepo id > < / <名称> ProjectRepo < /名称> < url >文件:/ / $ {project.basedir} / libs url > < / < /库> 并像往常一样添加依赖项 < >的依赖 < groupId > groupId < / groupId > < artifactId > artifactId < / artifactId > <版本> > < /版本 < / >的依赖

仅此而已。

有关详细信息:如何在Maven中添加外部库(已存档)