maven中(续)

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!


aaa.jpg

26.idea集成maven

导入maven项目上边已经说了


idea.png

28.idea构建maven项目

idae项目4.png
idea构建maven项目1.png
idea项目2.png
idea项目3.png

30.转换基于maven的web项目

maven转web1.png
maven转web2.png
maven转web3.png
maven转web4.png
maven转web5.png
maven转web6.png
maven转web7.png

停止运行项目可以点启动旁边的红色按钮停止。

31.使用maven模板场景项目

常用的俩模板

  1. maven-archetype-webapp – Java Web Project (WAR)
  2. 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测试插件文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容