我如何在Maven中实现,只有在本地存储库中尚未安装工件时,才从命令行执行“ mvn install”时才自动决定构建工件(jar / war)?

我已经尝试使用配置文件,这里的问题是在“激活”任务中,我无法通过Maven属性引用本地存储库。我无法对本地存储库进行硬编码,因为那样会破坏我在其他环境中的构建。

我还尝试通过在上一阶段触摸文件来尝试解决方法,例如初始化,然后检查是否存在文件作为激活条件,但这不起作用,因为在执行初始化之前先评估了激活条件。

任何提示或想法如何解决此问题?

谢谢,
彼得

最佳答案

简短的答案是:没有理智的方法可以做到,Maven不能那样工作。

您可以做的是创建一个Shell脚本,该脚本首先尝试从本地存储库解析项目(使用dependency:get),并且仅在该第一部分失败时才调用mvn clean install。但是这样做的问题是,您必须在调用中使用项目的确切groupId,artifactId和版本,因为这将无法工作:

mvn dependency:get -DrepoUrl=${localRepository} -DgroupId=${project.groupId} \
    -DartifactId=${project.artifactId} -Dversion=${project.version} \
    -Dtransitive=false


不幸的是,在项目尚不可用时会扩展变量。



因此,唯一好的解决方案是以编程方式进行操作。编写自定义插件或使用GMaven创建常规脚本。如果成功,请尝试resolve the project artifact from the repository并引发MojoFailureException。但是它仍然很笨拙,我就离开它。

09-04 21:55