Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
maven将太多JAR打包到WEB-INF/lib,清除本地存储库并重新执行mvn可以使事情变得正确_Maven - Fatal编程技术网

maven将太多JAR打包到WEB-INF/lib,清除本地存储库并重新执行mvn可以使事情变得正确

maven将太多JAR打包到WEB-INF/lib,清除本地存储库并重新执行mvn可以使事情变得正确,maven,Maven,在我们公司,数千个项目是在3台服务器上构建的,使用mvn命令。 少数项目偶尔会将太多JAR打包到其WEB-INF/lib文件夹中,不需要的JAR看起来像另一个项目的业务代码及其依赖项 这是 红色框中的jar看起来像另一个项目的jar,项目名称是jd common,右边的另一个绿色jar是另一个项目的依赖项 在清除本地存储库之前,这种情况总是会再次出现 我猜另一个项目使用mvn install将JAR安装到构建服务器上的本地存储库中,而我们的项目实际上只依赖jd common cached和jd

在我们公司,数千个项目是在3台服务器上构建的,使用mvn命令。 少数项目偶尔会将太多JAR打包到其WEB-INF/lib文件夹中,不需要的JAR看起来像另一个项目的业务代码及其依赖项

这是

红色框中的jar看起来像另一个项目的jar,项目名称是jd common,右边的另一个绿色jar是另一个项目的依赖项

在清除本地存储库之前,这种情况总是会再次出现

我猜另一个项目使用mvn install将JAR安装到构建服务器上的本地存储库中,而我们的项目实际上只依赖jd common cached和jd common util


我怎么能避免这个?!谢谢你的帮助。

首先,如果罐子在那里,你就依靠它们了。您可能依赖于这些隐式传递依赖项。运行mvn dependency:tree以列出所有依赖项,包括可传递的。你可能会发现你依赖于另一个项目,而这个项目又依赖于那些红/绿罐子


其次,在构建服务器上,您不希望与其他项目共享本地repo。这就是为什么,至少在Jenkins中,有一个选项使用私有存储库——这样所有项目都将被分离。当工件不再处于远程repo中,但由于该工件处于本地repo中,因此构建仍然是绿色的时,这可以保护您免受这种情况的影响。但这与您描述的问题无关。

它终于得到解决了

项目A依赖于另一个项目B部署的jar,依赖jar是B.A->B中的一个子模块

不幸的是:

 1. A and B are packaged on the same build server
 2. B's sub-module jar has the parent config in its pom.xml.
 3. B use "mvn clean install -DskipTests" as the build command, so all the B's modules are installed in local repository.

Maven总是打包本地安装的jar,并使用安装的jar的pom文件来查找子依赖项,因此在执行Maven时,项目A发现:我的一个依赖jar有一个父级,它是B,并且B的所有子模块都在本地存储库中找到,因为B安装了所有子模块,所以我应该打包它们

我不明白这个问题。如果WEB-INF/lib中包含一个jar,那是因为您的项目依赖它…@Tunaki是的,这是我们所期望的,但是只有少数项目会打包一些意外的jar,直到我们清除本地repo。可以编辑您的问题:列出您的pom.xml内容和依赖项:树输出。谢谢回答。使用单独的本地回购可能会有所帮助,但我的老板和我想知道根本原因。mvn依赖关系:树显示我们的项目仅依赖jd common cached和jd common util。它们是由project jd common导出的JAR。红色框中的JAR是jd common的子模块,但它们是业务模块,未部署在远程存储库中。我认为它出现在我们的项目中是因为jd common build在这个服务器上使用mvn install命令。如何与您共享jd common的pom.xml?这可能会有帮助。这是文件。谢谢tree.txt是依赖项:tree reuslt。太多的_jars.txt列出了错误战争的WEB-INF/lib,而正确的_jars.txt列出了清除本地存储库后的打包重用。谢谢~我们终于找到了原因~,并通过为每个项目使用单独的本地存储库来解决。