首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bash将顶级依赖关系从mvn依赖项:tree转换为Maven坐标列表?

如何使用bash将顶级依赖关系从mvn依赖项:tree转换为Maven坐标列表?
EN

Stack Overflow用户
提问于 2020-02-26 09:55:16
回答 1查看 489关注 0票数 1

为了能够在不创建uber-jar的情况下为我的应用程序创建火花提交命令,我希望在构建过程中创建应用程序顶层依赖项的maven坐标的逗号分隔列表,然后我可以在spark-submit中使用--packages= (或spark.jars.packages=)。

可以使用“`mvn依赖关系:树”检索此列表,该列表输出具有此格式的列表:

代码语言:javascript
复制
[INFO] com.myorg:my-project:jar:1.0-SNAPSHOT
[INFO] +- org.scala-lang:scala-library:jar:2.11.12:compile
[INFO] +- org.scala-lang:scala-compiler:jar:2.11.12:compile
[INFO] |  \- org.scala-lang.modules:scala-parser-combinators_2.11:jar:1.0.4:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.10:compile
[INFO] +- io.circe:circe-config_2.11:jar:0.6.1:compile
[INFO] |  +- com.typesafe:config:jar:1.3.3:compile
[INFO] |  +- io.circe:circe-core_2.11:jar:0.11.1:compile
[INFO] |  |  +- io.circe:circe-numbers_2.11:jar:0.11.1:compile
[INFO] |  |  \- org.typelevel:cats-core_2.11:jar:1.5.0:compile
[INFO] |  |     +- org.typelevel:cats-kernel_2.11:jar:1.5.0:compile
[INFO] |  |     \- org.typelevel:machinist_2.11:jar:0.6.6:compile
[INFO] +- org.scalatest:scalatest_2.11:jar:3.0.8:test
[INFO] |  \- org.scalactic:scalactic_2.11:jar:3.0.8:test
[INFO] \- org.mock-server:mockserver-netty:jar:5.6.1:test
[INFO]    +- org.mock-server:mockserver-client-java:jar:5.6.1:test
[INFO]    +- org.mock-server:mockserver-core:jar:5.6.1:test
[INFO]    |  +- io.netty:netty-codec-socks:jar:4.1.35.Final:test
[INFO]    |  +- com.github.java-json-tools:json-schema-validator:jar:2.2.10:test
[INFO]    |  |  +- javax.mail:mailapi:jar:1.4.3:test
[INFO]    |  |  +- com.googlecode.libphonenumber:libphonenumber:jar:8.0.0:test
[INFO]    |  |  \- net.sf.jopt-simple:jopt-simple:jar:5.0.3:test
[INFO]    |  +- com.jayway.jsonpath:json-path:jar:2.4.0:test
[INFO]    |  |  \- net.minidev:json-smart:jar:2.3:test
[INFO]    |  |     \- net.minidev:accessors-smart:jar:1.2:test
[INFO]    |  |        \- org.ow2.asm:asm:jar:5.0.4:test
[INFO]    |  +- org.apache.commons:commons-text:jar:1.3:test
[INFO]    |  \- org.apache.commons:commons-collections4:jar:4.2:test
[INFO]    +- io.netty:netty-buffer:jar:4.1.35.Final:test
[INFO]    +- io.netty:netty-handler:jar:4.1.35.Final:test
[INFO]    \- io.netty:netty-transport:jar:4.1.35.Final:test
[INFO]       \- io.netty:netty-resolver:jar:4.1.35.Final:test

注意,顶级依赖项前面是"[INFO] +- " (在'-'之后只有一个空格)。

只有":jar:"依赖项是相关的,而其中只有":compile"依赖项。

我只想输出符合以下所有分式的行:

"[INFO] +- "

  • containing ":jar:"

  • containing ":compile"

开始的

从这些提取的orginization:package:version中提取如下:org.scala-lang:scala-library:jar:2.11.12:compile ==> org.scala-lang:scala-library:2.11.12

然后用逗号(,)分隔这些输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 09:55:16

以下解决方案对我有效:

mvn dependency:tree | grep -e '^\[.*\I\N\F\O.*\][[:space:]]+-[[:space:]]' | grep -e ':\j\a\r:' | grep -e ':\c\o\m\p\i\l\e$' | cut -d ' ' -f3 | sed 's/:jar:/:/g' | sed 's/:compile//g' | paste -sd ','

这考虑到转义特殊字符,如通常干扰grep的空格和括号。

grep命令执行字符串筛选、cut命令标记和选择列、sed命令替换字符串和paste命令进行连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60411162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档