逐步了解如何将大量jar文件的平面目录转换为.m2/存储库结构



我想知道如何快速获取计算机中包含1K jar的目录,并让Gradle将其构造为Maven.m2/repository结构。我读过Gradle发布功能,但当jar数量如此之大时,似乎不可能使用它,因为它们不是从META-INF中获取信息,而是希望用户指定组ID和其他详细信息。

我让你等了一会儿,但我在这一点上想出了一个解决方案。看看这个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目录时,这才有效。如果没有,我没有更好的猜测,如何将其组织到本地存储库中。

最新更新