Netbeans:pom 类型的 Maven 依赖项
Posted
技术标签:
【中文标题】Netbeans:pom 类型的 Maven 依赖项【英文标题】:Netbeans: maven dependencies of type pom 【发布时间】:2012-10-03 19:52:27 【问题描述】:我花了很多时间,我的头已经炸了,所以我会非常感谢任何帮助。
我正在将 Netbeans Platform 应用程序从 ant 迁移到 maven,因此我将版本控制存储库中的所有 jar 更改为 maven 依赖项。我在主 maven 存储库中找到了所需的工件,并在 Netbeans 的帮助下将其添加为依赖项,但它的类型为 POM 并放置在 Non-classpath Dependencies
中,我不知道如何使用它,因为它没有添加到类路径等......
谁能解释一下这些POM依赖是什么以及如何使用它们?
提前谢谢你!!
编辑
这是pom.xml
中的依赖定义
<dependency>
<groupId>com.kitfox.svg</groupId>
<artifactId>svg-salamander</artifactId>
<version>1.0</version>
<type>pom</type>
</dependency>
【问题讨论】:
删除<type>pom</type>
行不能解决问题吗?
@rlegendi 当删除 <type>pom</type>
结果是:Could not transfer artifact com.kitfox.svg:svg-salamander:jar:1.0 from/to junit_4 (http://repo1.maven.org/maven2/): No connector available to access repository junit_4 (http://repo1.maven.org/maven2/) of type test using the available factories WagonRepositoryConnectorFactory -> [Help 1]
【参考方案1】:
添加pom依赖只会拉下传递依赖,即在pom中定义为依赖的jar依赖。由于显而易见的原因,pom 没有被添加到类路径中,但是可以从 pom 访问的传递依赖项将被添加到类路径中。
理想情况下,您需要做的是拥有jar
类型的依赖项默认依赖项类型是jar
,您可以简单地定义依赖项,而无需在依赖项部分中添加任何type
元素。
如果你已经在 Maven Cental 中找到了你需要的 jar 文件,那么你只需要在依赖项部分中为每一个提供 groupId artifactId 和 version。
【讨论】:
【参考方案2】:就我个人而言,我想不出任何需要添加pom
类型依赖的情况。我通常对项目中的父模块使用pom
打包(指定常见的项目配置,如插件版本、常见的依赖项,如log4j
例如存储库、属性等)和实用程序包模块(组装项目的模块)并做一些其他必要的事情)。
从我的经验来看(我做过几次),在将项目从 ant 迁移到 maven 时,您应该将项目曾经依赖的所有 jar 文件转换为 maven 依赖项(groupId:artifactId:version
)。很可能所有这些依赖项都没有任何<type>
(例如,是罐子)。
【讨论】:
也许我被误导了。因为我在 NetBeans 中通过搜索功能添加了此依赖项,并且只提供了添加pom
类型的依赖项的选项
@Uko 我明白了。无论如何,我不建议添加 pom
类型依赖项。您应该明确声明您的项目所依赖的所有库。
在 maven book 中,他们建议在 pom 中对常见依赖项进行分组 - books.sonatype.com/mvnref-book/reference/…
我认为有一个用例或使用 pom 依赖。您可以通过组合添加公共依赖项,而不必通过公共父 POM(即继承)添加它们。以我个人的经验,有时父 POM 无法更改,因此必须人为添加中间 POM 以允许公共依赖项。该解决方案很混乱,可以通过在任意 POM 中具有公共依赖项来替换,然后将其作为依赖项包含在您选择的 POM 中,并具有 pom.xml 的依赖项类型。如前所述,包含 POM 意味着加载了所有传递依赖项。以上是关于Netbeans:pom 类型的 Maven 依赖项的主要内容,如果未能解决你的问题,请参考以下文章
如何使用maven依赖插件将类型为pom的依赖项复制到一个位置