Maven 如何让“mvn包”意识到它已经构建了目标

Maven 如何让“mvn包”意识到它已经构建了目标,maven,maven-assembly-plugin,Maven,Maven Assembly Plugin,在makefile中,我可以轻松地执行以下操作 ${target}: ${sources} mvn package 其中我有${target}生成的jar文件和${sources}所有java文件和pom.xml。使用此生成文件,除非自上次生成目标后更改了其中一个源,否则不会重建目标。结果是 $> make target/demo-0.8.0-SNAPSHOT-jar-with-dependencies.jar make: 'target/demo-0.8.0-SNAPSHOT-

在makefile中,我可以轻松地执行以下操作

${target}: ${sources}
    mvn package
其中我有
${target}
生成的jar文件和
${sources}
所有java文件和
pom.xml
。使用此生成文件,除非自上次生成目标后更改了其中一个源,否则不会重建目标。结果是

$> make target/demo-0.8.0-SNAPSHOT-jar-with-dependencies.jar
make: 'target/demo-0.8.0-SNAPSHOT-jar-with-dependencies.jar' is up to date.
但是只要
mvn包
将始终运行
maven汇编插件
,即使源文件没有更改

问题:


有没有一种方法可以让
mvn包
知道源文件,就像
make
知道这一点一样,它只会说“不需要,它已经构建好了。”

是否有意义可能取决于用例和开发人员。 在一个集成远比通过单元测试复杂的系统中,获得信心的唯一方法是部署到测试Kubernetes环境中


无论如何,感谢您回答我的问题,maven打包插件无法处理此依赖项跟踪。

您所说的
是什么意思,我有${target}生成的jar文件和${sources}所有java文件和
。。。你能举一个更详细的例子说明你在这里的意思吗。。最好是github或类似平台上的一个示例项目,
make
命令知道目标只依赖于源。因此,如果没有,如果源的时间戳比目标的时间戳更晚,它将不会执行动作
mvn包
。我不是来自Java/Maven的背景,我在Maven中寻找同样的、合理的行为,特别是因为打包步骤相当耗时<如果不需要做任何事情,code>make将立即返回。我非常了解make/makefile。首先,时间戳是不可靠的。首先,增量行为在Maven(或者更好的插件)中不起作用,因为它是一个极其复杂的部分。许多插件支持(部分)但不是全部。除此之外,您在哪里执行
程序包
。。本地还是在构建服务器上?本地和服务器上,在服务器上它只是maven(通过CI管道),但在本地我更喜欢makefile方法,因为它允许我执行类似于
生成dockerimage
的操作,这取决于目标,如果我只是在处理
Dockerfile
,则不重建目标。我对组合的makefile+maven方法很满意,但一位同事认为我是在复制maven的功能。为什么您需要在本地构建?你不能通过IDE运行测试吗?创建docker映像对于本地构建真的很有必要吗?问题是您在Makefile中到底在做什么?你有一个例子项目吗?嗯…有趣的信息,你没有提到。。。那么本地构建就没有意义了。我建议将您的分支推送到您的CI,并让CI部署到K8S集群。因此,这就意味着Makefile的意义更加渺茫了。您需要对K8进行哪些本地无法进行的检查/测试?不幸的是,你没有提供更多的信息,所以我可以给出一个更有根据的答案。如果您在CI上,增量构建是无用的,因为每次构建时,您都会进入不同的节点/机架,并且您的工作区是干净的。只有对本地缓存有用的缓存。啊,顺便说一句。你能准确地给出你是如何在Makefile中定义
${sources}
的吗?