2016-12-05 44 views
2

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

有什么之间进入本地资源库中,并在发生什么的target文件夹有什么区别?

回答

3

它们完全不同,不应混淆。

  • target代表构建目录。这就是说,从源代码生成过程中生成的每个临时文件都会在那里结束。特别值得一提的是,您会发现主要和测试Java源代码的已编译类,但you'll also find lots of things in there(生成的源文件,已过滤的文件等)。重要的是,这个文件夹中包含的所有内容都是固有的临时性的。您可以随时删除,运行mvn clean,并保证未来建设将(或至少应该)工作得很好。根据target生成的所有文件和文件夹只用于一个目的:创建项目的工件。 Maven项目,例如与jar包装,将有一个单一的主神器,这与jar扩展组成its final name,并且将包含编译的Java类。最终名称可以是自定义名称,在POM中设置,或者从项目的Maven coordinates派生的默认名称。这样的项目也可以附加附加的工件,如测试JAR或源JAR。

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

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

回顾:target包含构建期间创建项目工件的主要临时细节(主JAR,源,Javadoc ...即应该由该项目部署和发布的所有内容),同时本地存储库(和远程存储库)将只包含工件本身。

1

在生成module.jar方面没有多少,如果这就是你是什么真正关心关注的问题。 .jar生成的是相同的,同样考虑到重新编译代码会清除你的/target文件夹,但不是.m2

虽然/target文件夹一般会由编译源类/target/classes并用module.jar沿/target/generated-source等。

在另一方面当地~.m2/repository将包括module.jarpom.xml该模块和所有的configs(repositoriesdependencies等)一起从重建如果需要该模块。