### 基于源代码运行java-maven应用 #### **语言支持** 好雨云平台支持java-maven项目的运行。如果对maven不太了解可以先熟悉一下基本的maven知识。maven项目通过pom.xml文件来进行项目的依赖管理,好雨平台也通过pom.xml来检测出项目的语言类型。 #### **项目运行的各软件版本** | 组建 | 配置名 | 支持的值 | 默认值 | | -- | -- | -- | -- | | JDK | java.runtime.version | 1.6, 1.7, 1.8,1.9 | 1.8 | | MAVEN | maven.version | 3.0.5, 3.1.1, 3.2.5,3.3.1 | 3.3.1 | | TOMCAT | tomcat.version | 6.0.41, 7.0.56, 8.0.14 | 7.0.56 | #### **创建maven-web项目** 可以使用maven命令 ~~~ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ~~~   ~~~ mvn archetype:generate  固定格式 -DgroupId         组织标识(包名) -DartifactId        项目名称 -DarchetypeArtifactId   指定ArchetypeId,maven-archetype-quickstart,创建一个Java Project;maven-archetype-webapp,创建一个Web Project -DinteractiveMode      是否使用交互模式 ~~~ 也可以使用IDE(eclipse、Intellij Idea)来创建maven-web项目,注意选择**maven-archetype-webapp** 这样才能创建web项目。 #### **运行依赖** **maven-war-plugin** 平台检测出项目为maven项目后,在构建阶段会将代码进行打包操作,所以在pom文件中需要加入能够打包项目为war包的插件。平台需要将项目打包成war包后执行,所以需要加上`maven-war-plugin` 示例如下: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <warName>java-hello</warName> </configuration> </plugin> </plugins> </build> **webapp-runner** 对于java-web的项目好雨平台默认使用webapp-runner来启动程序,所以还应该在程序中加入如下配置。 ~~~ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.github.jsimone</groupId> <artifactId>webapp-runner</artifactId> <version>8.0.33.1</version> <destFileName>webapp-runner.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> ~~~ **`注意`** 如果没有加上web-runner插件会在日志中显示: ` Error: Unable to access jarfile target/dependency/webapp-runner` 的错误。 Webapp Runner可以在任何安装有JRE环境的系统中利用Tomcat将应用程序启动。使用Webapp Runner不需要安装Tomcat。它只是一个jar文件可以用java命令运行和配置。 将符合规范的项目创建完成后,按照**新建应用**的步骤操作,当代码提交完成后,平台就能够识别出项目所使用的语言来。如下图所示: ![](https://box.kancloud.cn/2016-08-09_57a9558e7ef0a.png) #### **启动** 项目构建完成后,如果没有问题就可以启动了。java-maven项目会默认使用webapp-runner运行。除此以外,用户还可以根据自己的需求,编写Procfile。 Procfile是一种帮助用户在云平台上将自己编写的程序运行起来的描述文件。我们也可以创建Procfile,并在里面编写运行命令。如 ~~~ web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war ~~~ `Procfile需要位于项目的根目录下` >####**`注意`** >在平台上并不是所有的开发语言都需要写 Procfile文件,我们尽量让用户做得最少且不改变已有的开发习惯。但针对特殊情况目前还是需要用户简单设置一下。 >部分语言的web应用我们会用默认的命令行启动,但如果用户有需求,可以自己设置运行命令,如php语言默认是apache启动的,如果用户需要用nginx启动,可以在代码根目录创建Procfile文件,并添加启动命令:web: vendor/bin/heroku-php-nginx