Gradle如何将一个包含大量jar文件的平面目录转为.m2/repository结构?
Gradle how to turn a flat directory of massive amount of jar files to the .m2/repository structure?
我想知道如何在我的计算机中快速获取一个包含 1K jar 的目录,并让 Gradle 将其结构化为 Maven .m2/repository
结构。我读过 Gradle publishing 功能,但当 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
目录时,这才有效。如果没有,我没有更好的猜测,如何将它组织到本地存储库中。
我想知道如何在我的计算机中快速获取一个包含 1K jar 的目录,并让 Gradle 将其结构化为 Maven .m2/repository
结构。我读过 Gradle publishing 功能,但当 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
目录时,这才有效。如果没有,我没有更好的猜测,如何将它组织到本地存储库中。