[英]How to add 70 local jars on maven project?
当您拥有如此数量的本地罐子时,为什么还要使用Maven ?
因此,我们的客户有很多私人罐子和定制罐子。 例如commons-lang MyCompanyCustom.jar,它是commons-lang.jar ,其中包含10个以上的类。
因此,在他们的环境中,我们使用100%Maven而没有本地依赖项。 但是,在我们的站点上,我们具有可以在Eclipse中开发的jar,并且可以使用公共的jar构建Maven,但是我们无权将其jar添加到我们的组织存储库中。
因此,我们想使用Maven的优点,例如:编译,测试,构建uber-jar,添加静态代码分析,生成java-docs,sources-jars等。不要在Eclipse的帮助下一一思考。
因此,我们有70个罐子,如果我对它们的环境有效,可以在Maven Central中找到50个罐子,但其中20个是我所谓的“自定义”罐子。 我当然搜索了决定,但发现了这一点:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
所以对于所有20个人,我必须在开发Maven个人资料中添加它? 有没有像Gradle这样的简单方法,您可以在其中将所有具有其依赖项的文件夹添加到现有文件夹中?
在每个开发人员的存储库中一一安装也是不可接受的。
请忘记前面提到的system
范围! 太麻烦了...
理想情况下,您所有的开发人员都可以访问您所在组织或组织中的Repository Manager(如果可能)。
或者,您可能拥有一个用于测试所有依赖项都在其中的集中环境。 这种方法可用于模拟编译的工作方式,就像在客户环境中一样。 另外,您只需设置一次jar。
因此,在他们的环境中,我们使用100%Maven而没有本地依赖项。 但是,在我们的站点上,我们具有可以在Eclipse中开发的jar,并且可以使用公共的jar构建Maven,但是我们无权将其jar添加到我们的组织存储库中。
根据您在上述摘录中所说的,我相信您希望在客户端安装程序中存在依赖项的情况下,在构建的pom.xml
中进行设置。
尤其是,正如您指出的那样,该组织未授予您在存储库中添加其jar的权限,因此,我将使用provided
范围。
如Maven文档所述,提供的依赖项的定义如下:
这很像编译,但是表明您希望JDK或容器在运行时提供依赖项。 例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。 该作用域仅在编译和测试类路径上可用,并且不可传递。
因此,基本上,您假设这些依赖项将出现在客户端的安装程序中。 但是,这有一些限制。 这意味着您可以独立构建解决方案,但无法在本地对其进行测试,因为您的工作站上没有依赖项。
如果您甚至无法访问jar来配置中央环境,请询问您的客户端是否可以提供DEV / SIT环境。
为了避免对每个(相关)项目进行整个恒定的复制粘贴过程,maven提供了集中化依赖项和插件配置的工具,其中之一就是继承父pom的配置。 如以下文档中所述,这非常简单:
<packaging>pom</packaging>
; <parent> ... </parent>
设置父配置标签(此文档非常清楚); 您还可以将其与上述解决方案一起应用,以这种方式结合在一起,以找到最适合您需求的解决方案。
但是那里有一个庞大的Maven世界,因此我建议您仔细阅读其文档,以进一步确认您的可能性。 我记得这些情况,因为我曾经遇到过类似的情况。
祝好运!
TL; DR: MavenHoe创建一个Maven存储库服务器 (不是目录),该服务器从目录中提供艺术品,并根据需要猜测您要的内容。 目的是避免复杂的版本同步-它只占用最接近请求的G:A:V的任何内容。
我已经将MavenHoe项目移至Github,该项目几乎因Google Code的衰落而迷失了。 因此,我将其以完整答案的形式放在此处以供参考:
处理此类情况时,您可以选择的一种方法是采用.jar
形式的目录形式的任何内容,并将其视为存储库。
前一段时间,我为此目的编写了一个工具。 我的情况是我们正在构建JBoss EAP并重新编译每个依赖项。 这导致了成千上万个.jar文件,它们通常与它们的Central对应文件相同(加上安全性和错误修复)。
我需要针对这些工件而不是中央工件进行测试。 但是,Maven坐标相同。
因此,我编写了这个“ Maven存储库/代理”,它在找到可能的东西时提供了工件,如果找不到,它将请求转发给了Central。
它可以从三个来源得出G:A:V:
MANIFEST.MF
META-INF/.../pom.xml
该文件在目录中的位置,并结合如下配置文件:
jboss-managed.jar org/jboss/man/ jboss-managed 2.1.0.SP1 jboss-managed-2.1.0.SP1.jar getopt.jar gnu-getopt/ getopt 1.0.12-brew getopt-1.0.12-brew.jar jboss-kernel.jar org/jboss/microcontainer/ jboss-kernel 2.0.6.GA jboss-kernel-2.0.6.GA.jar jboss-logging-spi.jar org/jboss/logging/ jboss-logging-spi 2.1.0.GA jboss-logging-spi-2.1.0.GA.jar ...
第一列是.zip中的文件名; 然后分别是groupId(带有斜线或点),artifactId,版本,工件文件名。
您的70个文件将在此文件中列出。
在此页面上查看更多信息:
https://rawgit.com/OndraZizka/MavenHoe/master/docs/README.html
该项目在这里可用。
如果您找不到更好的东西,请随意叉起来并进一步推动。
另一个选择是项目RepoTree 。
这个目录从另一个仅包含.jar
的目录创建一个Maven存储库目录 (不是服务器)。 换句话说,它创建必要的.pom
文件和目录结构。 它仅考虑档案中包含的元数据(MANIFEST.MF,pom.xml)中的精确信息。
用于将工件从目录递归安装到基于Aether 1.7的本地Maven存储库中的实用程序
这是5岁,但仍然可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.