Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果mvn clean未运行,Maven删除的类仍在jar中_Maven - Fatal编程技术网

如果mvn clean未运行,Maven删除的类仍在jar中

如果mvn clean未运行,Maven删除的类仍在jar中,maven,Maven,为了加快maven的构建速度,我希望运行mvn安装,而不是mvn清洁安装。 如果我这样做了,并且源文件被删除(在VCS中,我在更新副本后得到了此更改),maven仍将打包旧文件(因为它仍在目标文件夹下)。 我知道线程和其他类似的,但我不满意的最终结果 我假设maven足够“聪明”,只接受更改并进行真正的增量构建,但这种行为打破了这一假设 有人知道如何在不使用clean生命周期的情况下使用maven享受真正的增量构建吗?maven贯穿其生命周期,在过程中的各个点通过插件运行外部工具。您可以选择此过

为了加快maven的构建速度,我希望运行
mvn安装
,而不是
mvn清洁安装

如果我这样做了,并且源文件被删除(在VCS中,我在更新副本后得到了此更改),maven仍将打包旧文件(因为它仍在目标文件夹下)。
我知道线程和其他类似的,但我不满意的最终结果

我假设maven足够“聪明”,只接受更改并进行真正的增量构建,但这种行为打破了这一假设


有人知道如何在不使用
clean
生命周期的情况下使用maven享受真正的增量构建吗?

maven贯穿其生命周期,在过程中的各个点通过插件运行外部工具。您可以选择此过程开始的位置,建议的起点是
clean
。我们推荐这个是因为Maven对你的源代码一无所知——它甚至不知道它是java还是C++——而且它不需要。它只知道,一旦到达生命周期的
compile
步骤,就应该在配置的源目录上调用配置的编译器(例如javac)

您的编译器知道源代码,所以如果这里有什么问题,请归咎于编译器。然而,大多数编译器不会仅仅因为源文件已被删除就删除已编译工件,因为它不知道该工件以后不会被链接(引用)——就编译器而言,它只对与源文件相关的工件感兴趣。这可能是查看源代码的唯一工具(除了一些静态代码分析工具和一些文档工具,比如site和javadoc)

Maven将在编译后继续运行测试,如果测试通过,它将进入打包步骤。打包也是一个外部工具(例如jar),通过插件进行配置。在jar或war的情况下,这将获取目标目录的内容,并根据配置的指令将其压缩到jar或war中。同样,这一部分也不需要知道文件是否已从源代码中删除——事实上,此时它甚至不查看源代码,因此它如何知道文件已被删除

我的观点是,您对开发环境的假设太多了。它无法知道目标目录中的文件是不需要的,除非您竭尽全力告诉它这是不需要的。这就是为什么首先要进行
清理
步骤的原因


顺便说一句,
clean
不应该占用很多时间。如果是的话,也许你应该把你的项目重构成更多的模块。

第一次清理并不是一个目标,而是一个目标。除此之外,
和源文件被删除是什么意思…
?这是否意味着您已经在构建中生成了代码?我将目标更正为生命周期。至于我的意思——VCS项目中删除了一个源文件,而更新我的本地副本在本地删除了该文件。如果不在Maven中执行非常特殊的操作,如何从VCS中删除源文件。除此之外,请出示您的pom文件…否则您提到的内容对我来说没有意义。一个类可以由一个开发人员删除(代码更改的一部分),提交回VCS,我将在更新本地副本时获得此删除。这是一个非常常见的场景,与maven无关。。