一行bash命令,用于将pom的Maven工件下载到指定的库

一行bash命令,用于将pom的Maven工件下载到指定的库,maven,awk,sed,ant,Maven,Awk,Sed,Ant,以下是我得到的信息: mvn dependency:tree | grep ":compile" | sed 's/+//' | sed 's/-//' | sed 's/\\//' | sed 's/\|//g' | sed 's/ //g' | sed 's/:jar:/:/'| sed 's/:compile//' | sed 's/:/,/g' | sed 's/\[INFO\]//' 是的,这是初步的。我想这里有一个“cut”用法,可能是awk为curl/wget构造一行http:/

以下是我得到的信息:

mvn dependency:tree | grep ":compile" | sed 's/+//' | sed 's/-//' | sed 's/\\//' | sed 's/\|//g' | sed 's/ //g' | sed 's/:jar:/:/'| sed 's/:compile//' | sed 's/:/,/g' | sed 's/\[INFO\]//'
是的,这是初步的。我想这里有一个“cut”用法,可能是awk为
curl/wget构造一行http://central.maven.org/maven2/com/thoughtworks/xstream/xstream/1.4/xstream-1.4.jar
但我的Bash fu不在那里

显然,考虑到正在进行的所有管道,后续的curl/wget钻头是很容易的。这只是URL的结构,这是遥不可及的

这就是我所拥有的东西的结局(所以你不必理解Maven):


因此,我无法按要求使用oneliner,但一个小的Python脚本很合适:

# pip3 install sh
from sh import mvn, grep, rm, mkdir, sed, wget
import csv

rm("-rf", "libs")
mkdir("libs")

tree = sed(sed(mvn("dependency:tree", _tty_out=False), "s/\\[INFO\\]//"), "/\\[WARNING\\]/d")
lines = sed(sed(sed(sed(sed(sed(sed(sed(tree, "s/+//"), "s/-//"), "s/\\\//"), "s/\|//g"), "s/ //g"), "s/:jar:/:/"), "s/:/,/g"), "s/\[INFO\]//")

for gav in csv.reader(lines):
    if (len(gav) is not 4):
        continue

    mkdir("-p", "libs/" + gav[3])
    try:
        wget("http://central.maven.org/maven2/" + gav[0].replace(".", "/") + "/" + gav[1] + "/" + gav[2] + "/" + gav[1] + "-" + gav[2] + ".jar", "-O", "libs/" + gav[3] + "/" + gav[1] + "-" + gav[2] + ".jar")
    except:
        pass
用于
https://github.com/paul-hammant/spring-jetty-integrationtest-ant-example/blob/master/mavdl.py
(演示项目)


编辑:Maven Resolver还有一个Ant功能,我被告知:

如果您认为bash one liner仍然可行,请明确指定您的输入以及从下面工作的Python脚本的See输出中需要的确切输出,Inian:)
# pip3 install sh
from sh import mvn, grep, rm, mkdir, sed, wget
import csv

rm("-rf", "libs")
mkdir("libs")

tree = sed(sed(mvn("dependency:tree", _tty_out=False), "s/\\[INFO\\]//"), "/\\[WARNING\\]/d")
lines = sed(sed(sed(sed(sed(sed(sed(sed(tree, "s/+//"), "s/-//"), "s/\\\//"), "s/\|//g"), "s/ //g"), "s/:jar:/:/"), "s/:/,/g"), "s/\[INFO\]//")

for gav in csv.reader(lines):
    if (len(gav) is not 4):
        continue

    mkdir("-p", "libs/" + gav[3])
    try:
        wget("http://central.maven.org/maven2/" + gav[0].replace(".", "/") + "/" + gav[1] + "/" + gav[2] + "/" + gav[1] + "-" + gav[2] + ".jar", "-O", "libs/" + gav[3] + "/" + gav[1] + "-" + gav[2] + ".jar")
    except:
        pass