【问题标题】:Gradle how to turn a flat directory of massive amount of jar files to the .m2/repository structure?Gradle如何将大量jar文件的平面目录转换为.m2/repository结构?
【发布时间】:2022-01-10 03:55:28
【问题描述】:

我想知道如何在我的计算机中快速获取一个包含 1K jar 的目录,并让 Gradle 将其构建为 Maven .m2/repository 结构。我已经阅读了Gradle publishing 功能,但是当 jar 的数量很大时似乎几乎不可能使用,因为它们没有从 META-INF 获取信息,而是希望用户指定组 ID 和其他详情。

【问题讨论】:

  • 您运行哪个平台?老实说,我建议使用 bash 脚本来完成。但是对于 Windows,由于我缺乏 Win 脚本编写能力,我无法提出解决方案????。
  • 一个脚本就可以了。像您建议的解决方案正是我正在寻找的,尽管 Java 生态系统不提供更简单的方法听起来很奇怪。

标签: java maven gradle jar repository


【解决方案1】:

我让你稍等片刻,但我现在想出了一个解决方案。看看这个 bash 脚本:

#!/usr/bin/env sh
PWD=$( pwd )
JARS=$( find $PWD -name '*.jar' )
for JARFILE in $JARS
do
    echo "found JAR: $JARFILE";
    mkdir -p $PWD/extracted/$JARFILE/;
    unzip $JARFILE -d $PWD/extracted/ &> /dev/null;
    if [ -d "$PWD/extracted/META-INF/maven/" ]; then
        POMPROPS=$( find $PWD/extracted/META-INF/maven -name 'pom.properties' );
        echo "found POMPROPS: $POMPROPS";
        POMXML=$( find $PWD/extracted/META-INF/maven -name 'pom.xml' );
        echo "found POMXML: $POMXML";
        ARTIFACTID=$( grep 'artifactId' $POMPROPS | cut -d'=' -f2 | tr -d '\r' );
        GROUPID=$( grep 'groupId' $POMPROPS | cut -d'=' -f2 | tr -d '\r' );
        VERSION=$( grep 'version' $POMPROPS | cut -d'=' -f2 | tr -d '\r' );
        if [[ -f $POMPROPS && -f $POMXML ]]; then
            GROUPDIR=$( sed 's/\./\//g' <<<$GROUPID);
            echo "Group dir: "$GROUPDIR;
            mkdir -p ~/.m2test/repository/$GROUPDIR/$ARTIFACTID/$VERSION/
            cp $POMXML ~/.m2test/repository/$GROUPDIR/$ARTIFACTID/$VERSION/$ARTIFACTID-$VERSION.pom
            cp $JARFILE ~/.m2test/repository/$GROUPDIR/$ARTIFACTID/$VERSION/$ARTIFACTID-$VERSION.jar
        else
            echo "did not find pom properties and/or xml "
            echo "$JARFILE: did not find pom properties and/or xml" >> log.txt
        fi
    else
        echo "$JARFILE: no maven directory found" >> log.txt
    fi
    rm -rf $PWD/extracted/;
done

请先看一下并理解它。你不应该在不理解它的情况下运行任何脚本。我当然不想搞砸你,但请始终保持谨慎?。您必须安装 sed、grep 和 unzip。但是,大多数发行版都应该包含它。

只需在目录内的终端中运行该脚本即可。它应该在~/.m2test 内组织你的JAR。如果没有找到某些文件,它将记录在log.txt 中。最终,您可以将文件从~/.m2test 复制粘贴或移动到~/.m2,只要您乐观,就会成功。

当然:一定要备份(在这种情况下是你的~/.m2)?!

这 - 当然 - 只有当你的 JAR 在 META-INF 中有 maven 目录时才有效。如果没有,我没有更好的猜测,如何将它组织到本地存储库中。

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多