Maven:如何将JAR包含在J2EE项目中?

在我的J2EE项目中,我有一些依赖项,这些依赖项在任何Maven仓库中都不可用,因为它们是专有的库。 这些库需要在运行时可用,所以必须复制到目标/…/ WEB-INF / lib …

现在,我将它们作为系统依赖列出在我的POM中,但是这个方法的问题是,在编译期间没有被复制到目标版本。 这种方法也不是很优雅。

那么把它们整合到Maven中的最好方法是哪个?

注意:我不想创build我自己的Maven仓库。

正如你所说的,你不想build立你自己的仓库,也许这会有所帮助。

您可以使用maven-install-plugin的install-file目标将文件安装到本地存储库。 如果您为每个文件创build一个包含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 

然后,您可以在项目中正常引用依赖项。

然而,你最好的select是build立一个内部的远程仓库,我build议你自己使用Nexus 。 它可以运行在你的开发箱,如果需要的话,开销是最小的。

对于想快速解决这个问题的人来说:

 <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> 

只需给你的库一个唯一的组ID和工件名称,并指向它在文件系统中的位置。 你已准备好出发。

当然这是一个肮脏的快速修复,只会在你的机器上工作,如果你不改变path的库。 但有些时候,这就是你想要的,运行并做一些testing。

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

在您的项目下创build一个存储库文件夹 让我们来

 ${project.basedir}/src/main/resources/repo 

然后,将您的自定义jar安装到此回购:

 mvn install:install-file -Dfile=[FILE_PATH] \ -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ -Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR] 

最后,将下面的回购和依赖项定义添加到项目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> 

您需要设置一个将托pipe这些库的本地存储库。 有很多项目正是这样做的。 例如Artifactory 。

你可以将它们安装在一个私有的本地存储库(例如你的主目录下的.m2 / repository)中: 更多细节在这里

如果我理解的很好,如果你想做的是在编译阶段导出依赖关系,所以不需要手动检索每个需要的库,你可以使用mojo 拷贝依赖关系 。

希望它可以在你的情况下有用( 例子 )

继续使用它们作为系统依赖项,并将它们复制到目标/…/ WEB-INF / lib …使用Maven依赖项插件:

http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

单独安装并不适合我。

 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的解决scheme是为我工作的。

这正是我所期待的。 研究testing代码的一种方法。 没有什么花哨。 是的,我知道这就是他们都说:)各种maven插件解决scheme似乎是为我的目的矫枉过正。 我有一些jar子给我作为第三方库文件。 我希望它快速编译/运行。 这个我平凡适应python的解决scheme为我创造了奇迹。 剪切和粘贴到我的朋友。 这个任务的Python / Perl代码是在这个Q&A: 我可以添加jar到maven 2生成类path而不安装它们?

 def AddJars(jarList): s1 = '' for elem in jarList: s1+= """ <dependency> <groupId>local.dummy</groupId> <artifactId>%s</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${project.basedir}/manual_jars/%s</systemPath> </dependency>\n"""%(elem, elem) return s1 

你可以尝试使用maven-external-dependency-plugin,它显示了将外部jar添加到任何Maven项目的好方法。

https://code.google.com/p/maven-external-dependency-plugin/

如果您使用Jenkins版本,没有解决scheme工作! 当pom运行在Jenkins内部的服务器上时,这些解决scheme将失败,因为Jenkins运行pom将尝试从企业资源库下载这些文件。

复制src / main / resources / lib下的jar(创buildlib文件夹)。 这些将成为您的项目的一部分,并一路走向部署服务器。 在部署服务器中,确保启动脚本在classpath中包含src / main / resources / lib / *。 中提琴。