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

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

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

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


当前回答

我找到了另一种方法来做到这一点,看看这里从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 <版本> < /版本> < / >的依赖

其他回答

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

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

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

我只是想要一个快速而肮脏的变通办法……我不能从Nikita Volkov运行脚本:语法错误+它需要一个严格的jar名称格式。

我制作了这个Perl脚本,它与jar文件名的任何格式一起工作,它在xml中生成依赖项,这样它就可以直接复制粘贴到pom中。

如果你想使用它,确保你理解脚本在做什么,你可能需要改变lib文件夹和groupId或artifactId的值…

#!/usr/bin/perl

use strict;
use warnings;

open(my $fh, '>', 'dependencies.xml') or die "Could not open file 'dependencies.xml' $!";
foreach my $file (glob("lib/*.jar")) {
    print "$file\n";
    my $groupId = "my.mess";
    my $artifactId = "";
    my $version = "0.1-SNAPSHOT";
    if ($file =~ /\/([^\/]*?)(-([0-9v\._]*))?\.jar$/) {
        $artifactId = $1;
        if (defined($3)) {
            $version = $3;
        }
        `mvn install:install-file -Dfile=$file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar`;
        print $fh "<dependency>\n\t<groupId>$groupId</groupId>\n\t<artifactId>$artifactId</artifactId>\n\t<version>$version</version>\n</dependency>\n";
        print " => $groupId:$artifactId:$version\n";
    } else {
        print "##### BEUH...\n";
    }
}
close $fh;

Maven安装插件使用命令行将jar安装到本地存储库中,POM是可选的,但你必须指定GroupId, ArtifactId, Version和Packaging(所有POM的东西)。

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

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

仅用于丢弃代码

设置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中包含系统依赖项)