如何使用Java Main将jar添加到CloudFoundry java buildpack的类路径中

时间:2015-08-24 20:21:46

标签: postgresql java-ee cloudfoundry ibm-cloud websphere-liberty

我目前正致力于将多个WAR和Java Batch文件的单个清单文件配置部署部署到IBM Bluemix(CloudFoundry)。

我的想法是,我只是运行" cf push"然后一些魔法发生了,我已经完成了。

这对于在IBM Liberty上运行的WAR文件以及绑定到它的PostgreSQL服务非常有效,但遗憾的是,它不适用于Standalone - Java Main类,因为我不知道如何放置其他jar到类路径。

这是我的manifest.yml:

#declared-services:
#  postgresql:
#    label: elephantsql
#    plan: turtle

applications:
- name: multipleWarDeploy1
  disk: 1024M
  path: Web/Web.war
  memory: 256M
  instances: 2
  host: sixendpointURL
  services:
  - postgresql
- name: batch
  disk: 1024M
  path: Batch/Batch.jar
  buildpack: java_buildpack 
  memory: 256M
  no-route: true
  instances: 1
  services:
  - postgresql

正如您所看到的,用于Batch应用程序的Java Main buildpack只允许我引用一个jar文件,因此我想知道如何上传包含jar的lib文件夹。我已经将引用放入Batch.jar的MANIFEST.MF文件中 - 所以这在本地工作的地方有lib文件夹 - 但不是远程的,因为这个文件夹没有被推送到Bluemix,只有批处理.jar文件。

有什么想法吗?

tnx很多 罗密欧

3 个答案:

答案 0 :(得分:1)

我会使用像one-jar这样的工具将我所有的罐子打包成一个罐子。

http://one-jar.sourceforge.net/

答案 1 :(得分:0)

解决方案可能是推送自由实例的包,作为自由运行时的允许选项。 您可以通过执行'server package zip-name --include = usr'来创建自由服务器zip 然后您可以使用以下命令推送zip:'cf push app-name -p zip-name'

有关此选项的完整文档,请从 https://www.ng.bluemix.net/docs/#starters/liberty/index.html#liberty

以下是有关推送自由应用程序的可用选项的文档: https://www.ng.bluemix.net/docs/starters/liberty/index.html#optionsforpushinglibertyapplications

答案 2 :(得分:0)

我刚测试了在服务器目录中有两个批处理war文件,然后将该目录推送到具有指定server.xml的单个Bluemix应用程序。一旦推送,两个应用程序都能正常工作。

创建如下目录结构:

Directory Structure Example

然后将war文件添加到apps文件夹(我的示例中有我使用的两个示例war文件)并将每个应用程序添加到server.xml文件中。

我添加到server.xml的两行显示如下:

<application name="BonusPayout" context-root="/BonusPayout" type="war" location="BonusPayout.war"/>
<application name="SimpleBatchJob" context-root="/SimpleBatchJob" type="war" location="SimpleBatchJob.war"/>

最后在刚刚创建的defaultServer目录的父目录中运行以下命令:

cf push YourBluemixAppName -p defaultServer

这将推送包含所有war文件的整个目录。