目标文件夹vs本地存储库

Joh*_*han 6 maven

我知道Maven包含了本地存储库中构建的结果(工件安装在其下~/.m2/repository/),但它也会在target旁边的文件夹中输出已编译的类src.

本地存储库中的内容与target文件夹中的内容之间有什么区别吗?

Tun*_*aki 10

它们是完全不同的,不应混淆.

  • target表示构建目录.也就是说,从源代码构建期间生成的每个临时文件都会在那里结束.非常值得注意的是,您将找到主要和测试Java源代码的编译类,但您也会发现很多内容(生成的源文件,过滤的文件等).重要的是,此文件夹中包含的所有内容本质上都是暂时的.您可以随时删除它,运行mvn clean,并确保下一个构建将(或至少应该)正常工作.生成的所有文件和文件夹target都有一个用途:创建项目的工件.Maven项目,例如jar包装,将有一个主要工件,它由带有扩展名的最终名称组成jar,并将包含已编译的Java类.最终名称可以是自定义名称,在POM中设置,或者是从项目的Maven坐标派生的默认名称.此类项目还可以具有其他附加工件,例如测试JAR或源JAR.

  • 本地存储库仅包含工件.那里没有临时文件.运行时安装的mvn install是严格生成的Maven项目工件,即最终产品,以及项目的POM文件.用于创建它们的所有东西都不会放在本地存储库中,并且项目的构建绝不能将临时内容放在那里.请记住,本地存储库是一个Maven存储库,因此遵循严格的命名方案:组件ID为my.groupid,工件ID my-artifactid和版本的项目1.0将安装在该文件夹中my/groupid/my-artifactid/1.0; 在其中您将找到POM文件以及所有其他工件.工件本身的名称不能被覆盖:它将my-artifactid-1.0.jar用于JAR项目(可能添加了分类器).

这通常是一个混淆的来源:在文件target夹下生成的主工件文件的名称与安装时在本地存储库中的名称完全不同,或者在部署时在远程存储库中.第一个可以被控制,但后者由存储库的命名方案定义,该方案是从坐标计算的.

回顾一下:target在构建过程中包含所有可靠的临时细节,这些细节创建了项目的工件(主JAR,源代码,Javadoc ......即应该由该项目部署和发布的所有内容),而本地存储库(和远程存储库)将仅包含工件本身.