为啥 JavaMoney 依赖项是 POM 包?

Posted

技术标签:

【中文标题】为啥 JavaMoney 依赖项是 POM 包?【英文标题】:Why the JavaMoney dependency is packages as POM?为什么 JavaMoney 依赖项是 POM 包? 【发布时间】:2019-05-19 10:55:46 【问题描述】:

我对构建系统不是很有经验,但这让我很好奇。

大多数库使用<type>jar</type>(默认)作为其依赖项,而JavaMoney 库使用pom,这是什么原因?

【问题讨论】:

What is "pom" packaging in maven?的可能重复 我不认为这是重复的,因为我想了解为什么做出这个决定。该链接解释说 Maven 中有子模块,这就是它打包为 POM 的原因....但是我看到许多带有输出 jar 的子模块的项目 大概,他们决定不希望将库打包为单个 JAR 文件。为什么?问问他们! (您还没有给我们一个指向 POM 文件的链接以查看 上下文 ...所以我们实际上不知道您可能在谈论的许多 POM 中的哪一个。) 这就是我在这里发帖的原因,所以他们可以回答,因为他们监控我包含的标签,这是回答问题的地方......我不会在他们的 github repo 上打开一个问题,因为这个不是问题...... gitter 中的一个问题会丢失 好吧good luck with that :-) 许多开发人员既没有时间也没有意愿回答“你为什么做出这样的设计决定”这样的问题。 【参考方案1】:

因为 JavaMoney 是多模块项目,并且该项目的根有打包 pom。

当您在 pom.xml 中声明依赖项时,它将使用它们的传递依赖项附加到项目中。这也适用于打包 pom 的工件。在这种情况下,传递依赖将是 JavaMoney 的实现。

mvn dependency:tree
...
[INFO] +- org.javamoney:moneta:pom:1.3:compile
[INFO] |  +- org.javamoney.moneta:moneta-core:jar:1.3:compile
[INFO] |  +- org.javamoney.moneta:moneta-convert:jar:1.3:compile
[INFO] |  +- org.javamoney.moneta:moneta-convert-imf:jar:1.3:compile
[INFO] |  +- org.javamoney.moneta:moneta-convert-ecb:jar:1.3:compile
[INFO] |  +- javax.money:money-api:jar:1.0.3:compile
[INFO] |  \- javax.annotation:javax.annotation-api:jar:1.3.2:compile

【讨论】:

以上是关于为啥 JavaMoney 依赖项是 POM 包?的主要内容,如果未能解决你的问题,请参考以下文章

为啥maven的pom.xml中插件本身没有声明flyway的数据库驱动依赖?

TomEE1.7.x 推荐的 JSF 依赖项是啥?

若依配置教程集成积木报表JimuReport

记一次解决jar包版本问题解决

为啥有排除 pom.xml / maven 中依赖项的依赖项的选项?

为啥不能使用pom文件中的maven依赖?