我知道Maven在本地存储库中安装了构建的结果(工件在~/.m2/repository/
下安装),但它也会在src
旁边的target
文件夹中输出已编译的类。目标文件夹vs本地存储库
有什么之间进入本地资源库中,并在发生什么的target
文件夹有什么区别?
我知道Maven在本地存储库中安装了构建的结果(工件在~/.m2/repository/
下安装),但它也会在src
旁边的target
文件夹中输出已编译的类。目标文件夹vs本地存储库
有什么之间进入本地资源库中,并在发生什么的target
文件夹有什么区别?
它们完全不同,不应混淆。
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 ...即应该由该项目部署和发布的所有内容),同时本地存储库(和远程存储库)将只包含工件本身。
在生成module.jar
方面没有多少,如果这就是你是什么真正关心关注的问题。 .jar生成的是相同的,同样考虑到重新编译代码会清除你的/target
文件夹,但不是.m2
。
虽然/target
文件夹一般会由编译源类/target/classes
并用module.jar
沿/target/generated-source
等。
在另一方面当地~.m2/repository
将包括module.jar
与pom.xml
该模块和所有的configs(repositories
,dependencies
等)一起从重建如果需要该模块。