24.maven自动化部署 (待测试)#
在项目开发中,通常是部署过程包含以下步骤
- 检入代码在建项目全部进入SVN或源代码库中,并标记它。
- 从SVN下载完整的源代码。
- 构建应用程序。
- 生成输出要么WAR或EAR文件存储到一个共同的网络位置。
- 从网络获取的文件和文件部署到生产现场。
- 更新日期和应用程序的更新版本号的文件。
问题说明
通常有多人参与了上述部署过程。一个团队可能手动签入的代码,其他人可以处理构建等。这很可能是任何一个步骤可能会错过了,由于涉及和由于多团队环境手动工作。例如,较旧的版本可能不会被更换网络设备和部署团队再部署旧版本。
解决
通过结合自动化的部署过程
- Maven构建和释放项目,
- SubVersion源代码库,管理源代码,
- 和远程存储库管理器(Jfrog/ Nexus)来管理项目的二进制文件。
更新项目的pom.xml
我们将使用Maven发布插件来创建一个自动释放过程。
例如:bus-core-api 项目POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<scm>
<url>http://www.svn.com</url>
<connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
Framework
</connection>
<developerConnection>scm:svn:${username}/${password}@localhost:8080:
common_core_api:1101:code
</developerConnection>
</scm>
<distributionManagement>
<repository>
<id>Core-API-Java-Release</id>
<name>Release repository</name>
<url>http://localhost:8081/nexus/content/repositories/
Core-Api-Release
</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<scmCommentPrefix>[bus-core-api-release-checkin]-
<
/scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
</project>
在pom.xml中,下面是我们使用的重要元素
元素 | 描述 |
---|---|
SCM | Configures the SVN location from where Maven will check out the source code. |
Repositories | Location where built WAR/EAR/JAR or any other artifact will be stored after code build is successful. |
Plugin | maven-release-plugin is configured to automate the deployment process. |
Maven发布插件
Maven使用确实下列有用的任务maven-release-plugin.
mvn release:clean
它清除以防工作区的最后一个释放的过程并不顺利。
mvn release:rollback
回滚是为了以防工作空间代码和配置更改的最后一个释放的过程并不顺利。
mvn release:prepare
执行多个操作次数
- 检查是否有任何未提交的本地更改或不
- 确保没有快照依赖
- 更改应用程序的版本并删除快照从版本,以释放
- 更新文件到 SVN.
- 运行测试用例
- 提交修改后POM文件
- 标签代码在subversion中
- 增加版本号和附加快照以备将来发行
- 提交修改后的POM文件到SVN。
mvn release:perform
检查出使用前面定义的标签代码并运行Maven的部署目标来部署战争或内置工件档案库。
让我们打开命令控制台,到 C: > MVN >bus-core-api 目录并执行以下命令mvn命令。
C:MVN >bus-core-api>mvn release:prepare
Maven将开始建设该项目。一旦构建成功运行以下命令mvn命令。
C:MVN >bus-core-api>mvn release:perform
一旦构建成功,您可以在资料库验证上传的JAR文件。
坑:多模块实验未成功
25.mavenweb应用
本教程将教你如何管理使用Maven版本控制系统管理一个基于Web项目。在这里,将学习如何创建/构建/部署和运行Web应用程序:
创建Web应用程序
要创建一个简单的java web应用程序,我们将使用Maven的原型 - web应用插件。因此,让我们打开命令控制台,进入到C: MVN目录并执行以下命令mvn命令。
C:MVN>mvn archetype:generate
-DgroupId=com.companyname.automobile
-DartifactId=trucks
-DarchetypeArtifactId=maven-archetype-webapp
-DinteractiveMode=false
Maven会开始处理,并建立完整的基于Web的Java应用程序项目结构。
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] --------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] --------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:MVN rucks
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Tue Jul 17 11:00:00 IST 2012
[INFO] Final Memory: 20M/89M
[INFO] -------------------------------------------------------------------
现在去到C:/ MVN目录。您将看到创建了一个名为trucks (如artifactId指定)一个java应用程序项目。
Maven使用标准的目录结构。用上面的例子中,我们可以了解到以下关键概念
文件夹结构 | 描述 |
---|---|
trucks | contains src folder and pom.xml |
src/main/webapp | contains index.jsp and WEB-INF folder. |
src/main/webapp/WEB-INF | contains web.xml |
src/main/resources | it contains images/properties files . |
POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.automobile</groupId>
<artifactId>trucks</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>trucks Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>trucks</finalName>
</build>
</project>
Maven还创建了一个示例JSP源文件
打开 C: > MVN > trucks > src > main > webapp > 文件夹,你会看到index.jsp。
<html> <body> <h2>Hello World!</h2> </body>
</html>
构建Web应用程序
让我们打开命令控制台,进入到C:MVN rucks目录并执行以下命令mvn命令。
C:MVN rucks>mvn clean package
Maven将开始建设该项目。
部署Web应用程序
现在复制创建的trucks.war 到C: > MVN > trucks > target >文件夹到web服务器的webapp目录下,然后重新启动Web服务器。
测试Web应用程序
使用URL运行Web应用程序 : http://<server-name>:<port-number>/trucks/index.jsp
验证输出。
Hello World!
26.idea集成maven
导入maven项目上边已经说了
28.idea构建maven项目
30.转换基于maven的web项目
停止运行项目可以点启动旁边的红色按钮停止。
31.使用maven模板场景项目
常用的俩模板
- maven-archetype-webapp – Java Web Project (WAR)
- maven-archetype-quickstart – Java Project (JAR)
1. Maven 10个 模板 如果打开idea创建maven有很多模板可供选择,上边说过了,可以看下
如果键入命令mvn archetype:generate,10 模板会被提示在屏幕上
C:\worksp> mvn archetype:generate //waiting few seconds,then exits
Press CTRL + C
2. Maven archetype:generate
步骤来指导你如何从现有 webapp 模板来构建Web项目:
2.1 列出 Maven 的模板:
C:\worksp> mvn archetype:generate
8: internal -> org.apache.maven.archetypes:maven-archetype-site (An archetype wh
ich contains a sample Maven site which demonstrates
some of the supported document types like APT, XDoc, and FML and demonstra
tes how
to i18n your site. This archetype can be layered upon an existing Maven pr
oject.)
9: internal -> org.apache.maven.archetypes:maven-archetype-site-simple (An arche
type which contains a sample Maven site.)
10: internal -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype
which contains a sample Maven Webapp project.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive co
ntains): 7:
2.2 选择数字 “10” 来使用 org.apache.maven.archetypes:maven-archetype-webapp 模板,并填写详细信息:
Define value for property 'groupId': : com.yiibai.web
Define value for property 'artifactId': : myweb
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': com.yiibai.web: :
Confirm properties configuration:
groupId: com.yiibai.web
artifactId: myweb
version: 1.0-SNAPSHOT
package: com.yiibai.web
Y: : y
[INFO] -------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
maven-archetype-webapp:1.0
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:36 min
[INFO] Finished at: 2019-03-24T12:05:23+08:00
[INFO] Final Memory: 18M/192M
[INFO] ------------------------------------------------------------------------
3.更多示例
如果您知道哪个 archetypeArtifactId 使用,只需跳过交互模式命令:
3.1 maven-archetype-quickstart (Java Project)
$ mvn archetype:generate -DgroupId=com.yiibai.core -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
3.2 maven-archetype-webapp (Java Web Project)
$ mvn archetype:generate -DgroupId=com.yiibai.web -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
32.使用maven构建项目
要构建一个基于Maven的项目,打开控制台,进入到 pom.xml 文件所放的项目文件夹,并发出以下命令:
mvn package
这将执行Maven的“package”阶段。
Maven构建生命周期
Maven是分阶段运行,阅读 默认的Maven构建生命周期文章。因此,执行“package”阶段的时候,所有阶段 – “validate“, “compile” 和 “test“, 包括目前的阶段“package”将被执行。
“mvn package” 示例
当你运行“mvn package”命令,它会编译源代码,运行单元测试和包装这取决于在pom.xml文件的“packaging”标签。 例如,
1. If “packaging” = jar, 将您的项目打包成一个“jar”文件,并把它变成你的目标文件夹。
File : pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai</groupId>
<artifactId>Maven Example</artifactId>
<packaging>jar</packaging>
</project>
2. 如果 “packaging” = war,将您的项目打包成“war”文件,并把它变成目标文件夹。
File : pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai</groupId>
<artifactId>Maven Example</artifactId>
<packaging>war</packaging>
</project>
33.使用maven清理项目
在基于Maven的项目中,很多缓存输出在“target”文件夹中。如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署。
要清理项目缓存的输出,发出以下命令:
mvn clean
当“mvn clean”执行,在“target”文件夹中的一切都将被删除。
部署进行生产
要部署您的项目进行生产,它总是建议使用 “mvn clean package“
mvn clean package
34.使用maven运行单元测试
mvn test
这会在你的项目中运行整个单元测试。
案例学习
创建两个单元测试,并通过 Maven 的运行它。参见一个简单的 Java 测试类:
package com.yiibai.core;
public class App {
public static void main(String[] args) {
System.out.println(getHelloWorld());
}
public static String getHelloWorld() {
return "Hello World";
}
public static String getHelloWorld2() {
return "Hello World 2";
}
}
Unit Test 1
单元测试为getHelloWorld()方法。
package com.yiibai.core;
import junit.framework.Assert;
import org.junit.Test;
public class TestApp1 {
@Test
public void testPrintHelloWorld() {
Assert.assertEquals(App.getHelloWorld(), "Hello World");
}
}
Unit Test 2
单元测试为getHelloWorld2()方法。
package com.yiibai.core;
import junit.framework.Assert;
import org.junit.Test;
public class TestApp2 {
@Test
public void testPrintHelloWorld2() {
Assert.assertEquals(App.getHelloWorld2(), "Hello World 2");
}
}
运行单元测试
使用Maven运行单元测试看见下面的例子。
示例 1
运行整个单元测试(TestApp1和TestApp2),发出以下命令:
mvn test
****示例 2****
为了运行单个测试(TestApp1),发出此命令:
mvn -Dtest=TestApp1 test
[INFO] BUILD SUCCESS
****示例 3****
为了运行单个测试(TestApp2),发出此命令:
mvn -Dtest=TestApp2 test
注意
欲了解更多“mvn test”的例子,请参考Maven测试插件文档。