首页 > 解决方案 > CloudFoundry .cignore 文件以排除两个 JAR 文件之一

问题描述

我的 Gradle 构建作业在 build/libs 文件夹下创建了两个 JAR 文件(使用更改的 VERSION 占位符):

$ ls build/libs
foo-VERSION.jar foo-VERSION-all.jar

只有 'foo-VERSION-all.jar' 代表通过上传到 CloudFoundry 实例的工件

$ cf push

我的问题是两个 JAR 文件都上传到 CloudFoundry 实例,导致错误消息如

没有容器可以运行此应用程序。请确保您已使用 -p 命令行参数或路径清单条目推送了一个或多个有效的 JVM 工件。

好的,-p CLI 参数是一个选项,但应该有另一个选项!

在 CloudFoundry 的 manifest.yml 中,我声明了一个路径:

$ grep path manifest.yml
  path: build/libs

现在应该可以声明一个 .cfignore 文件(应该类似于众所周知的 .gitignore 文件)来排除 foo-VERSION.jar 文件,但我不明白,例如通过以下尝试:

$ cat .cfignore
*
!build/libs/*-all.jar

那有什么问题?任何想法让它工作?

谢谢

基督教

PS:我想在我的帖子中添加一个标签“.cignore”,但不幸的是我不被允许。

标签: javacloud-foundry

解决方案


默认情况下,您的应用程序的根目录和推送文件的位置是.. 当您path在 manifest.yml 或 set 中设置cf push -p时,您正在更改应用程序的根目录。

在您的示例中,您将根更改为build/libs. 因此,您需要:

  1. 放入.cfignore文件build/libs
  2. 使用来自build/libs.

放入时,以下内容对我有用build/libs/.cfignore

*
!foo-*-all.jar

最终只上传了一个 JAR 文件。

其他注意事项,请确保您使用的是最新版本。在这个领域报告了一些过去的错误


可能还值得一提,如果您调整构建以生成具有稳定名称的文件(例如foo-push-me.jar. 如果名称没有改变,你可以设置path: build/libs/foo-push-me.jar并且你不需要弄乱所有的忽略文件。


推荐阅读