繁体   English   中英

如何在Maven项目中添加70个本地jar?

[英]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环境。

以上都不是? 继承父pom。

为了避免对每个(相关)项目进行整个恒定的复制粘贴过程,maven提供了集中化依赖项和插件配置的工具,其中之一就是继承父pom的配置。 如以下文档中所述,这非常简单:

  • 首先,创建一个仅带有pom.xml的项目,在其中定义要集中化的所有内容(注意,某些项目的构造略有不同);
  • 使用选项pom作为包装标签的属性: <packaging>pom</packaging> ;
  • 在必须继承这些配置的pom中,在<parent> ... </parent>设置父配置标签(此文档非常清楚);
  • 现在,每次更新任何“全局” pom配置时,都必须在每个项目上更新父版本。 因此,您只需配置一次即可。

您还可以将其与上述解决方案一起应用,以这种方式结合在一起,以找到最适合您需求的解决方案。

但是那里有一个庞大的Maven世界,因此我建议您仔细阅读其文档,以进一步确认您的可能性。 我记得这些情况,因为我曾经遇到过类似的情况。

祝好运!

TL; DR: MavenHoe创建一个Maven存储库服务器 (不是目录),该服务器从目录中提供艺术品,并根据需要猜测您要的内容。 目的是避免复杂的版本同步-它只占用最接近请求的G:A:V的任何内容。

我已经将MavenHoe项目移至Github,该项目几乎因Google Code的衰落而迷失了。 因此,我将其以完整答案的形式放在此处以供参考:

处理此类情况时,您可以选择的一种方法是采用.jar形式的目录形式的任何内容,并将其视为存储库。

前一段时间,我为此目的编写了一个工具。 我的情况是我们正在构建JBoss EAP并重新编译每个依赖项。 这导致了成千上万个.jar文件,它们通常与它们的Central对应文件相同(加上安全性和错误修复)。

我需要针对这些工件而不是中央工件进行测试。 但是,Maven坐标相同。

因此,我编写了这个“ Maven存储库/代理”,它在找到可能的东西时提供了工件,如果找不到,它将请求转发给了Central。

它可以从三个来源得出G:A:V:

  1. MANIFEST.MF
  2. META-INF/.../pom.xml
  3. 该文件在目录中的位置,并结合如下配置文件:

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM