如何在 Maven 中实现,当从命令行执行“mvn install”时,仅当该 Artifact 尚未安装在本地存储库中时,才会自动决定构建该 Artifact (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创建groovy脚本。尝试resolve the project artifact from the repository如果成功,则抛出 MojoFailureException。但它仍然很糟糕,我就放弃它。
关于Maven 2 : Only build artifact if not already installed in local repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333635/