是否有可能有一个maven artifactID引用的几个文件?

时间:2014-03-11 12:13:11

标签: java maven build pom.xml nexus

通常(我只见过这样)maven神器是一个罐子。是否有可能将maven神器制成几个罐子。目前我必须在我的nexus中添加几个第三方库 - 我希望它们在maven中作为一个工件进行引用。

3 个答案:

答案 0 :(得分:1)

  

通常(我只见过这样)maven神器是一个罐子。是否有可能将maven神器制成几个罐子。

这种说法部分正确。是的maven工件是一个单独的jar单元,但很可能这个单独的jar单元可能需要多个其他jar才能正常工作。一个这样的例子可能是spring-core jar。如果你只在你的应用程序中添加spring-core jar,它很可能会给你一个ClassNotFoundException并抱怨其他多个缺少的依赖项(比如log4j,spring-web,commons等等)。为了解决这个嵌套的依赖问题,我们在maven中有transitive dependencies的概念

  

目前我必须将几个第三方库添加到我的nexus

在我看来,没关系,它应该如此。所有工件和jar库都应该是分开的。

  

我希望它们在maven中被引用为一件神器。

如果你想制作一个大(胖)罐子,请看看maven中的how to create a uber shaded jar

答案 1 :(得分:1)

如果您只是想将它们全部包含在一起,您可以创建一个pom项目,它将所有第三方库都作为依赖项。因此,您只需要将pom项目添加为依赖项:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.demo</groupId>
<artifactId>all-my-libs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<dependencies>
  <dependency>
    <groupId>l1</groupId>
    <artifactId>lib1</artifactId>
    <version>1.0</version>
  </dependency>
  <dependency>
    <groupId>l2</groupId>
    <artifactId>lib2</artifactId>
    <version>1.0</version>
  </dependency>
  ...
</dependencies>
</project>

这样,你仍然会有几个罐子,但只有一个依赖品。

答案 2 :(得分:1)

您应该阅读pom <scope>import</scope>依赖项,如here所示。

基本上,您需要使用所需的所有依赖项创建pom,然后使用范围import定义与它的依赖关系。