领先一步
VMware提供培训和认证,以加快您的进度。
了解更多Apache Maven是Java社区中非常流行的构建和部署应用程序的选择。Cloud Foundry团队发布了**Cloud Foundry Maven插件**,以集成应用程序的开发生命周期,包括云部署。同一个Maven插件可用于管理对任何Cloud Foundry实例的应用程序推送和更新。
Cloud Foundry的主要承诺之一是让你的开发生活更容易,而不会限制可用的选择。Cloud Foundry不仅支持多种语言(Java、Groovy、Scala、Ruby等)和框架(Spring、Grails、Rails、Sinatra、Lift等),还允许你将应用程序部署到不同的环境。这包括公共云,例如Cloudfoundry.com和AppFog.com,合作伙伴提供的云服务,单VM Micro Cloud Foundry,以及使用Cloud Foundry开源(在非常宽松的Apache License v2下可用)的你自己的私有云。
我们希望给你完全的选择权,关于如何将你的应用程序部署到Cloud Foundry。到目前为止,你可以选择以下途径:
现在介绍Cloud Foundry Maven插件。使用Cloud Foundry Maven插件,开发者现在可以轻松地将云部署集成到他们的Maven项目的生命周期中。此插件还提供了一种更简单的方法,可以从持续集成服务器(如Hudson和Jenkins)部署应用程序。Cloud Foundry Maven插件除其他功能外,还允许你:使用Cloud Foundry Maven插件,你可以简单地使用以下命令构建和部署应用程序:
$ mvn cf:push
如果你不熟悉Maven,请查看Josh Long的博客文章,标题为Green Beans: Getting Started with Maven and Spring。
让我们下载并构建示例应用程序(请确保已安装Git)
$ git clone https://github.com/SpringSource/cloudfoundry-samples.git
$ cd cloudfoundry-samples/hello-java
$ mvn clean package
这应该会在项目的target文件夹中生成一个名为“hello-java-1.0.war”的war文件。
<plugin>
<groupId>org.cloudfoundry</groupId>
<artifactId>cf-maven-plugin</artifactId>
<version>1.0.0.M1</version>
</plugin>
此外,插件的里程碑版本尚未在Maven Central存储库中可用。因此,请确保你还将Spring Framework Milestone Repository添加到pom.xml文件。
<pluginRepositories>
...
<pluginRepository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
</pluginRepository>
...
</pluginRepositories>
这代表了最基本的配置。当然,你通常希望添加一些其他配置选项,例如:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.cloudfoundry</groupId>
<artifactId>cf-maven-plugin</artifactId>
<version>1.0.0.M1</version>
<configuration>
<server>mycloudfoundry-instance</server>
<target>http://api.cloudfoundry.com</target>
<url>hello-java-maven.cloudfoundry.com</url>
<memory>256</memory>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
Cloud Foundry登录凭据怎么办?虽然可以将这些凭据存储为pom.xml文件中的配置参数,但我们建议改为将其分别存储在Maven的settings.xml文件中。此文件通常位于你的用户主目录下的.m2文件夹中,例如~/.m2/settings.xml。
典型的条目可能如下所示:
<settings>
...
<servers>
...
<server>
<id>mycloudfoundry-instance</id>
<username>[email protected]</username>
<password>s3cr3t</password>
</server>
</servers>
...
</settings>
请注意,在你的pom.xml中,你使用与settings.xml中的元素匹配的配置参数(值“mycloudfoundry-instance”)来引用settings.xml中的服务器参数。作为另一个选项,你还可以提供Cloud Foundry凭据作为命令行参数。
请记住,所有配置参数也可以通过命令行属性设置,这对于一次性操作、测试等非常方便。例如,你可以将上面显示的所有配置参数表示为:
$ mvn cf:info [email protected] -Dcf.password=s3cr3t -Dcf.memory=256 -Dcf.url=hello-java-maven.cloudfoundry.com \
-Dcf.target=http://api.cloudfoundry.com
Cloud Foundry Maven插件的命令行参数优先于基于pom.xml的参数。此外,许多配置参数都有合理的默认值。更多详细信息,请阅读https://github.com/cloudfoundry/vcap-java-client中的参考文档。
为了本例的需要,我们将继续使用pom.xml和settings.xml中的扩展配置。
现在我们已经为项目配置了插件,我们应该可以执行一些命令了。通常,使用Maven插件的所有调用都遵循类似的模式:
$ mvn cf:<<command>> [-Dcf.some_parameters] [-Dcf.some_other_parameter...]
让我们进行初始部署并将应用程序推送到Cloudfoundry.com:
$ mvn cf:push
这可能会失败,因为我们上面为应用程序定义的URL(hello-java-maven.cloudfoundry.com)已被占用(我的实例)。因此,你将看到以下错误消息:
...'The URI: "hello-java.cloudfoundry.com" has already been taken or reserved'...
因此,请确保为你的应用程序选择的URL尚未被其他人使用。请使用唯一的url参数重试——几秒钟后,我希望我可以祝贺你使用Maven将你的第一个应用程序部署到Cloud Foundry!
接下来,我们将进行应用程序更新。让我们编辑:
/src/main/java/org/cloudfoundry/samples/HelloServlet.java
我将只更改一些文本输出,例如:
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
writer.println("Cloud Foundry Rocks - Your application host's Ip address and port is: " + System.getenv("VCAP_APP_HOST") + ":" + System.getenv("VCAP_APP_PORT"));
...
}
}
更改后,发出以下Maven命令:
$ mvn clean cf:update
命令完成后,你应该会看到已部署应用程序中反映的更改。
http://support.cloudfoundry.com/entries/20316811
你的Micro Cloud Foundry运行后,你需要设置一个本地用户。为此,请发出以下Maven命令:
$ mvn cf:register -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.username=<provide new username> \
-Dcf.password=<provide new password>
请注意,用户名必须采用电子邮件地址的形式。之后,我们可以开始使用我们的本地Micro Cloud Foundry实例。命令与部署到Cloudfoundry.com时完全相同。例如,你可以通过执行以下命令在本地部署示例应用程序:
$ mvn cf:apps -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.password=s3cr3t -Dcf.username=the_username_registered_above \
-Dcf.url=hello-java.YOURMICROCLOUDNAME.cloudfoundry.me
我们的应用程序现在应该正在运行。为了验证,让我们列出已部署的应用程序:
$ mvn cf:apps -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.password=s3cr3t -Dcf.username=the_username_registered_above
...
+-------------+---+---------+--------+-----------------------------------------------+----------+
| Application | # | Health | Memory | URLS | Services |
+-------------+---+---------+--------+-----------------------------------------------+----------+
| hello-java | 1 | STARTED | 512 | hello-java.YOURMICROCLOUDNAME.cloudfoundry.me | |
+-------------+---+---------+--------+-----------------------------------------------+----------+