【问题标题】:Why does Maven create two jars for same source in target and groupId directory为什么 Maven 在 target 和 groupId 目录中为相同的源创建两个 jars
【发布时间】:2016-01-01 18:22:51
【问题描述】:

我有一个 Maven 项目,其 srcpom 有以下 groupIdartifactId

<groupId>com.useless.coders</groupId>
<artifactId>nonsense-program</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>

现在,当我们使用mvn clean install 构建jar 时,会创建一个目标文件夹,jar 名称和版本为nonsense-program-0.0.1。当我导航到文件夹结构com/useless/coders/ 中的.m2 存储库时,我可以看到在maven-metadata-local.xml 中还使用额外的元数据信息创建了同一个jar。我知道 Maven 存储库的用途,并且在 target 目录中,我们使用生成的带有 jar 和/或 libs 的 .class 文件来存放构建的所有输出。

但我很想知道为什么我们在target 目录和groupId 路径目录中维护两个相同源的jar 副本。我们不会节省一些空间吗?

【问题讨论】:

  • target 上的那个用于您当前的项目,.m2 上的那个用作可能需要它的其他项目的依赖项。
  • 是的,这是正确的,但无论如何其他项目都不会使用我的目标目录,对吗?我总是可以从 groupId 路径中获取 jar。
  • 正确,其他项目只会使用.m2目录下的jar

标签: java maven jar target


【解决方案1】:

这是因为您指示 Maven 这样做。如果你调用mvn clean package(而不是install),只会创建target下的Jar。 install 阶段告诉 Maven 将生成的 Jar 保存在本地存储库中。

【讨论】:

  • 没错,我的意思是说,当我们指示mvn clean install 时,我们会维护相同的 jar 副本,是否将其放入目标中不会产生太大差异
  • 正如@Salvador 已经提到的,target 文件夹被其他项目使用,如果您有 mutli 模块构建,这些项目可能存在。此外,您可以使用mvn clean install 控制其他项目(独立项目)可以使用您的项目的哪个状态,以便他们可以使用本地存储库$HOME/.m2/repository 中的状态。这会有所不同。
猜你喜欢
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
相关资源
最近更新 更多