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

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

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

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


当前回答

在我们的项目中起作用的是Archimedes Trajano写的,但是我们在.m2/settings.xml中有这样的东西:

 <mirror>
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://url_to_our_repository</url>
 </mirror>

*应该改为central。因此,如果他的回答不适合您,您应该检查settings.xml

其他回答

您确实应该通过存储库获得适当的框架,并预先识别您的依赖项。使用系统作用域是人们经常犯的错误,因为他们“不关心依赖管理”。问题是,这样做最终会得到一个不正常的maven构建,无法显示正常情况下的maven。你最好遵循这样的方法。

这是我们添加或安装本地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,因为它们是强制性的:)

注意:当使用System作用域时(如本页所述),Maven需要绝对路径。

如果你的jar在项目的根目录下,你需要在systemPath值前加上${basedir}。

systemPath的问题是依赖项的jar不会作为可传递依赖项沿着工件分布。试试我在这里发布的内容:最好是将项目jar文件Mavenize,还是将它们放在WEB-INF/lib中?

然后像往常一样声明依赖项。

请阅读脚注。

一个快速的批量解决方案(基于Alex的回答):

libs.bat

@ECHO OFF
FOR %%I IN (*.jar) DO (
echo ^<dependency^>
echo ^<groupId^>local.dummy^</groupId^>
echo ^<artifactId^>%%I^</artifactId^>
echo ^<version^>0.0.1^</version^>
echo ^<scope^>system^</scope^>
echo ^<systemPath^>${project.basedir}/lib/%%I^</systemPath^>
echo ^</dependency^>
)

执行如下:libs.bat > libs.txt。 然后打开lib .txt并将其内容复制为依赖项。

在我的例子中,我只需要库来编译我的代码,而这个解决方案是实现这一目的的最佳方案。