Maven将多个jar导入一个依赖项

时间:2016-12-09 10:45:57

标签: java maven batch-file jar

我有以下问题。假设我有一个不受我监督的外部罐子的目录。这些jar存储在lib目录

lib
|_folder1
|   |_jar1.jar
|   |_jar2.jar
|_folder2
|   |_jar3.jar
|_jar4.jar

现在,每次发布新版本的库时,我都会获得需要集成到应用程序中的lib文件夹的副本。

由于其中有很多罐子,我不想在每次开始新项目或库变更版本时集成无数罐子,我想也许我可以将所有这些罐子集成到一个库中由我当地的Maven存储库托管。

所以我们的想法是让一个抓取整个目录的脚本搜索所有jar文件并将它们安装在我的本地存储库中。

以下是该脚本的第一个版本:

SET @libPath="C:\path\to\lib"
SET @groupId="group.id.custom.lib"
SET @artifactId="custom-lib"
SET @version="1.0"
SET @packaging="jar"
for /r %@libPath% %%i in (*.jar) do mvn install:install-file ^ 
    -Dfile="%%i" ^
    -DgroupId=%@groupId%  ^
    -DartifactId=%@artifactId% ^
    -Dversion=%@version% ^
    -Dpackaging=%@packaging% 

我们的想法是只需要将依赖项添加到我的pom.xml文件中并完成它:

<dependency>        
        <groupId>group.id.custom.lib</groupId>
        <artifactId>custom-lib</artifactId>
        <version>[1.0,)</version>
</dependency>

脚本遍历所有文件,但只将它找到的jar放入我的本地存储库,并覆盖之前安装的jar。

问题是如果有办法通过脚本来实现这一点。

问候

[编辑:]在埃塞克斯男孩的评论之后,我已经调整了我的脚本:

SET @libPath="C:\path\to\lib"
SET @groupId="group.id.custom.lib"
SET @artifactId="custom-lib"
SET @version="1.0"
SET @packaging="jar"
SET @tempDir="C:\Temp\temp-dir"
SET @tempJar="temp.jar"
if not exist %@tempDir% mkdir %@tempDir%
cd %@tempDir%
del *.* /f /q
for /r %@magicDrawLib% %%i in (*.jar) do copy %%i %@tempDir%
for /r %@tempDir% %%j in (*.jar) do jar -xvf %%j del %%j
jar -cvf %@tempJar% *
mvn install:install-file ^
    -Dfile=%@tempJar% ^
    -DgroupId=%@groupId% ^
    -DartifactId=%@artifactId% ^
    -Dversion=%@version% ^
    -Dpackaging=%@packaging%

这似乎有效。我必须测试生成的Maven依赖项来验证它。

1 个答案:

答案 0 :(得分:1)

首先用另一个覆盖现有的jar会破坏使用maven的对象。所有工件都应该是可变的(永不改变)。如果您有一个新的jar,它是一个新版本,应该这样添加到您的存储库中。

我认为这个剧本是个好主意。

如果有多个人共享此存储库,那么我将创建您自己的共享存储库https://www.jfrog.com/open-source/是一个非常好的免费存储库。