Java Maven:如何将代表中不可用的JAR包含到J2EE项目中?

Java Maven:如何将代表中不可用的JAR包含到J2EE项目中?,java,maven-2,build-process,Java,Maven 2,Build Process,在我的J2EE项目中,我有几个依赖项,它们在任何Maven存储库中都不可用,因为它们是专有库。这些库需要在运行时可用,因此必须复制到target/../WEB-INF/lib 现在,我在POM中将它们列为系统依赖项,但使用此方法的问题是,它们在编译期间不会被复制到目标构建中。而且这种方法也不是很优雅 那么,在Maven中集成它们的最佳方式是什么 注意:我不想创建自己的Maven存储库。您可以将它们安装在私有的本地存储库中(例如,主目录下的m2/repository):您需要设置一个本地存储库来承

在我的J2EE项目中,我有几个依赖项,它们在任何Maven存储库中都不可用,因为它们是专有库。这些库需要在运行时可用,因此必须复制到target/../WEB-INF/lib

现在,我在POM中将它们列为系统依赖项,但使用此方法的问题是,它们在编译期间不会被复制到目标构建中。而且这种方法也不是很优雅

那么,在Maven中集成它们的最佳方式是什么


注意:我不想创建自己的Maven存储库。

您可以将它们安装在私有的本地存储库中(例如,主目录下的m2/repository):

您需要设置一个本地存储库来承载这些库。有许多项目正是这样做的。例如。

如果我理解得很好,如果您想在编译阶段导出依赖项,这样就不需要手动检索每个需要的库,那么您可以使用mojo


希望它在您的案例中有用()

正如您所说,您不想建立自己的存储库,也许这会有所帮助

您可以使用maven安装插件将文件安装到本地存储库。如果您为每个文件创建了一个带有Maven调用的脚本,并将其与jar一起保存,那么您(以及其他任何具有访问权限的人)可以轻松地将jar(以及相关的pom文件)安装到本地存储库中

例如:

mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom
或者只是

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar
然后,您可以在项目中正常引用依赖项


不过,您最好还是建立一个内部远程存储库,我建议您自己使用。如果需要,它可以在您的开发箱上运行,并且开销最小。

继续将它们用作系统依赖项,并将它们复制到target/../WEB-INF/lib。。。使用Maven依赖插件:


对于希望快速解决此问题的人:

<dependency>
  <groupId>LIB_NAME</groupId>
  <artifactId>LIB_NAME</artifactId>
  <version>1.0.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
</dependency>

LIB_名称
LIB_名称
1.0.0
系统
${basedir}/WebContent/WEB-INF/lib/YOUR_lib.jar
只需为您的库指定一个唯一的groupID和工件名称,并指向它在文件系统中的位置。你可以走了

当然,这是一个肮脏的快速修复,只会在您的机器上工作,如果您不更改libs的路径。但是有时候,这就是你想要的,运行并做一些测试


编辑:只是重新红色的问题,并意识到用户已经使用我的解决方案作为临时修复。我会留下我的答案,作为对其他回答这个问题的人的快速帮助。如果有人不同意,请给我留言。:)

单独安装对我不起作用

mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ \
  -Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq \  
  -DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3

@Ric Jafe的解决方案对我有效

这正是我想要的。一种用于研究测试代码的方法。没什么特别的。是的,我知道他们都这么说:)各种maven插件解决方案对我来说似乎有些过头了。我有一些罐子是作为第三方LIB和pom文件提供给我的。我希望它能快速编译/运行。这个解决方案对我来说是一个奇迹,我只是简单地适应了python。剪切并粘贴到我的pom中。此任务的Python/Perl代码在以下问答中:

def AddJars(jarList):
s1=“”
对于jarList中的元素:
s1+=“”“
本地虚拟
%
0.0.1
系统
${project.basedir}/manual\u jars/%s
\n““%”(要素,要素)
返回s1

在项目下创建存储库文件夹。让我们坐飞机吧

${project.basedir}/src/main/resources/repo
然后,将自定义jar安装到此repo:

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
最后,将以下repo和依赖项定义添加到projects pom.xml中:

<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>

回购计划
文件://${project.basedir}/src/main/resources/repo
[小组]
[人工制品]
[VERS]

如果您使用的是Jenkins build!!当pom在Jenkins构建服务器内运行时。。这些解决方案将失败,因为Jenkins运行的pom将尝试从企业存储库下载这些文件


复制src/main/resources/lib(创建lib文件夹)下的jar。这些将是您项目的一部分,并一直到部署服务器。在部署服务器中,确保启动脚本在类路径中包含src/main/resources/lib/*。Viola。

是的,我可以这样做,但是我必须告诉每个想要构建项目的人,他必须将文件X,Y放在目录Z中,这会使事情变得非常复杂。毕竟,我想用Maven来简化构建过程。术语上的一点是,这些是内部远程存储库,而不是本地存储库。本地存储库是本地文件系统依赖项下载到的存储库。我真的认为您应该回顾一下创建Maven存储库的决定。这一点都不难,而且100%值得。创建Maven存储库的价值取决于具体情况。可能重复感谢此方法现在对我很有效。我扩展了POM,使文件自动安装到本地代表:很高兴能提供帮助,但正如其他人所说,最好的方法是使用Maven repository manager。这种方法不能很好地扩展,我使用的命令是:“mvn install:install file-Dfile=cassandra-jdbc-1.1.1.jar-DgroupId=org.apache-extras.cassandra-jdbc-DartifactId=cassandra jdbc-Dversion=1.1.1-dpackage=jar”很酷。有没有一种方法可以指定URL而不是本地机器路径?谢谢你提供了一个完整的示例!!!我希望你钓到一条金鱼,它能满足你三个愿望这应该是可以接受的答案,因为它是自包含的(在pom.xml中)。嗨,Rajarshee,组和工件ID是完全任意的。文件系统中jar的路径是这项工作的关键。因为实际上jar并不是一个maven依赖项,你只是告诉maven把它当作一个依赖项来对待。到2016年,这似乎不起作用。构建ackno
<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>