Maven通过systemPath / system添加jar,但不添加到war或其他任何地方

我想通过systemPath从本地文件系统相对于我的项目目录结构添加一个jar文件,而不是在远程存储库上。 我添加了依赖声明,但maven没有对它做任何其他事情。

在下面的声明中,我希望将jar文件复制到我的目标web-inf / lib目录,并将jar文件作为war文件的一部分。 目前,这种情况不会发生。 如何将jar文件复制到我的war文件中?

这是调试maven模式的输出:

DEBUG] cglib:cglib-nodep:jar:2.2:test (setting scope to: compile)^M DEBUG] Retrieving parent-POM: org.objenesis:objenesis-parent:pom:1.2 for project: null:objenesis:ja DEBUG] org.objenesis:objenesis:jar:1.2:test (selected for test)^M DEBUG] org.javap.web:testRunWrapper:jar:1.0.0:system (selected for system)^M DEBUG] Plugin dependencies for: ...  org.javap.web testRunWrapper 1.0 system ${basedir}/lib/testRunWrapper.jar   maven-war-plugin    WebContent     

好的,我这样做了:注意底部的目录结构。 使用下面的方法,来自相对项目路径的jar文件被视为与其他jar一样的一等公民。 下面的列表更正了我原来的问题。 使用下面的pom.xml列表,jar文件将复制到我的目标目录。

   JBoss JBoss Repository default http://repository.jboss.org/maven2   my-local-repo file://${basedir}/lib/repo    testRunWrapper testRunWrapper 1.0.0  

 $ find repo repo repo/testRunWrapper repo/testRunWrapper/testRunWrapper repo/testRunWrapper/testRunWrapper/1.0.0 repo/testRunWrapper/testRunWrapper/1.0.0/testRunWrapper-1.0.0.jar 

使用maven依赖插件完成工作:

    org.apache.maven.plugins maven-dependency-plugin 2.8   copy-dependencies compile  copy-dependencies   ${project.build.directory}/${project.build.finalName}/WEB-INF/lib system       

不要使用系统。 要执行您想要的操作,只需将其声明为常规(编译)依赖项,并将mvn install:install-file用于本地存储库。 其他所有内容都可以按照您的需要运行(lib将被复制等)。这意味着构建只能在您的计算机上运行。

要为您的(内部)团队正确修复此问题,您需要设置存储库(例如Artifactory,Nexus或Archiva)。 对于团队使用Maven来说,这几乎是必须的。

如果这是用于公共(例如开源)使用,您可以通过http服务器模拟存储库或建立真正的存储库。

尝试这样的事情(使用Ant插件手动将jar放到输出目录):

  maven-antrun-plugin   test  run          

AFAIK,系统范围的依赖关系有点像提供范围的依赖关系,因此不包含在目标工件中。 为什么不将依赖项安装到本地存储库中呢?

从文档:

系统
此范围与提供的类似,只是您必须提供明确包含它的JAR。 工件始终可用,不会在存储库中查找。

使用对文件系统的引用的问题是依赖项目将无法全局访问此jar文件。 即依赖项目的$ {basedir}是不同的,因此将找不到.jar文件。

另一方面,全球存储库是普遍可访问的。

如果这个答案不适合你,因为它不适合我,你知道system是一个糟糕的范围,你可以尝试使用install-plugin安装jar的解决方案(向下滚动一下),它将JAR安装到您的实际本地Maven存储库中。 基本上你只需要将这个插件添加到你的pom.xml

  org.apache.maven.plugins maven-install-plugin 2.4   initialize  install-file   myGroupId myArtifactId myVersion jar ${basedir}/lib/xxx.jar     

填写groupIdartifactIdversion的相应值,并将原始jar文件放入/lib -directory并修复上面的file 。 你可以添加更多的execution ,但是不要忘记在那里添加id ,例如:

   common-lib 

从code-repo更新的每个人都需要调用mvn initialize一次。

所有Eclipse爱好者也可以将它添加到pom.xml ,以消除Eclipse中的错误:

     org.eclipse.m2e lifecycle-mapping 1.0.0      org.apache.maven.plugins maven-install-plugin [2.4,)  install-file