Maven 2 : Only build artifact if not already installed in local repository

标签 maven build repository skip artifact

如何在 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/

相关文章:

java - 使用 maven 执行 mahout 程序 (JAR) 时出现 NoClassDefFoundError

android - 无法配置 travis 以在 android 项目上工作

c++ - 如何在 Ubuntu 14.04.3 LTS 上构建 dolphin (Trusty Tahr)

android - 将 GitHub 项目导入 AndroidStudio 未正确显示

model-view-controller - 存储库模式 + 工作单元

java - Maven 插件依赖项包含在 MANIFEST.MF 中

java - 带注释 Controller 的 SpringMVC : requested resource is not available

java - Spring Boot 多模块 Maven 项目的 "buid"是什么?

repository - Entity Framework 无法获取实体并给出 "Object' s Key Does Not Match..”错误

java - Spring bean 注入(inject)无法正常工作