剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署
Maven组织项目进行编译、部署
Maven项目基本的结构说明如下:





<parent>
<groupId>org.mazhi</groupId>
<artifactId>mazhi-app-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../mazhi-app-parent</relativePath>
</parent>
注意添加relativePath节点。

|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring boot, hibernate配置文件
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类
| | |----resources ——存放项目资源文件,如spring boot, hibernate等配置文件
|----target ——项目输出位置
|----pom.xml ----Maven的配置文件
<?xml version="1.0"?>
<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>
<!-- 项目的父项目 -->
<parent>
<groupId>org.mazhi</groupId>
<artifactId>mazhi-app-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../mazhi-app-parent</relativePath>
</parent>
<!-- groupId: groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app -->
<groupId>org.mazhi</groupId>
<!-- artifactId: 项目的通用名称 -->
<artifactId>mazhi-core</artifactId>
<!-- packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par -->
<packaging>jar</packaging>
<!-- version:项目的版本 -->
<version>SNAPSHOT-0.0.1</version>
<!-- 项目的名称, Maven 产生的文档用 -->
<name>Mazhi Core</name>
<!-- 哪个网站可以找到这个项目,提示如果 Maven 资源列表没有,可以直接上该网站寻找, Maven 产生的文档用 -->
<url>http://mazhi.org</url>
<!-- 项目的描述, Maven 产生的文档用 -->
<description>A maven project to study maven.</description>
<!-- 用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置 -->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://ip:端口/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://ip:端口/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<!-- 依赖关系 -->
<dependencies>
<!-- 自动加入的依赖包,它们是通过项目坐标来找到依赖包的。所以用了maven之后就不需要再拷jar包了 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- 依赖的范围:默认为compile -->
<!-- test:测试范围有效。即编译和打包时不会加入该依赖包 -->
<!-- compile:编译范围有效。即编译和打包时会将该依赖包一并加入 -->
<!-- provided:编译和测试时有效,最后生成war包时不会加入该依赖包。比如web容器本身已包含的servlet-api.jar,再打包则会冲突 -->
<!-- runtime:运行范围有效,编译时则不依赖 -->
<scope>test</scope>
<!-- <exclusions><exclusion></exclusion></exclusions> -->
<!-- - exclusions表示只包括指定的项目,不包括相关的依赖。试想一下,两个三方jar依赖不同版本的日志包jar,项目会知道应该使用哪个吗?答案是否定的 -->
</dependency>
</dependencies>
</project>
微服务开发之Spring Boot
<properties>
<!-- 表示项目根目录 -->
<main.basedir>${basedir}/..</main.basedir>
<java.version>1.7</java.version>
<spring.version>4.1.4.RELEASE</spring.version>
<hibernate.api.version>1.0.1.Final</hibernate.api.version>
</properties>
<dependencyManagement> <dependencies> <dependency> Import dependency management from spring boot <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
这样子模块就可以引用这些属性。
在mazhi-app-parent项目中,配置spring boot集成maven的插件,如下:
<!-- 安装spring boot集成Maven的插件 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
在mazhi-service模块中引入Spring boot的包,如下:
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在 org.mazhi.service包中新建Application.class类,内容如下:
package org.mazhi.service;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@EnableAutoConfiguration
public class Application {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
添加Spring boot的配置文件,放到java/main/resource下,内容如下:
# Server settings (ServerProperties)
server:
port: 8090
sessionTimeout: 30
# contextPath: /
# Tomcat specifics
tomcat:
accessLogEnabled: false
protocolHeader: x-forwarded-proto
remoteIpHeader: x-forwarded-for
basedir:
backgroundProcessorDelay: 30 # secs
management:
address: 127.0.0.1
port: 8090
info:
app:
name: springtest
description: spring test
version: 1.0.0
注意缩近和格式,不要随便做对齐什么的操作,这是一种约定。
在这个类上右键,Run As >> Java Application,可以看到Eclipse的控制台输出如下信息,表示启动成功!!

可以用浏览器去访问一下这个服务,地址为:
http://localhost:8090/
浏览器会输出:
Hello World!
<dependency> <groupId>org.mazhi</groupId> <artifactId>mazhi-core</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
如果这时候没有对mazhi-core进行build和instaling过程时,可能会报错,需要对mazhi-core模块install一下,然后进行引入即可。
Maven项目有时候本身没错,但是项目名上显示红叉,这时候只要更新一下项目即可。
项目上右键 >> Maven >> Update Project .. 即可。
或者还报错的话,需要先运行mazhi项目下的pom.xml文件,install一下,保证几个子模块成功进行了build和installing过程。
剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署的更多相关文章
- 剑指架构师系列-持续集成之Maven+Nexus+Jenkins+git+Spring boot
1.Nexus与Maven 先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要 ...
- 剑指架构师系列-spring boot的logback日志记录
Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...
- 剑指架构师系列-Redis安装与使用
1.安装Redis 我们在VMware中安装CentOS 64位系统后,在用户目录下下载安装Redis. 下载redis目前最稳定版本也是功能最完善,集群支持最好并加入了sentinel(哨兵-高可用 ...
- 剑指架构师系列-tomcat6通过IO复用实现connector
由于tomcat6的配置文件如下: <Connector port="80" protocol="org.apache.coyote.http11.Http11Ni ...
- 剑指架构师系列-Struts2构造函数的循环依赖注入
Struts2可以完成构造函数的循环依赖注入,来看看Struts2的大师们是怎么做到的吧! 首先定义IBlood与BloodImpl类: public interface IBlood { } pub ...
- 剑指架构师系列-tomcat6通过伪异步实现connector
首先在StandardService中start接收请求的线程,如下: synchronized (connectors) { for (int i = 0; i < connectors.le ...
- 剑指架构师系列-Struts2的缓存
Struts2的缓存中最重要的两个类就是ReferenceMap与ReferenceCache.下面来解释下ReferenceCache中的get()方法. public V get(final Ob ...
- 剑指架构师系列-Hibernate需要掌握的Annotation
1.一对多的关系配置 @Entity @Table(name = "t_order") public class Order { @Id @GeneratedValue priva ...
- 剑指架构师系列-InnoDB存储引擎、Spring事务与缓存
事务与锁是不同的.事务具有ACID属性: 原子性:持久性:由redo log重做日志来保证事务的原子性和持久性,一致性:undo log用来保证事务的一致性隔离性:一个事务在操作过程中看到了其他事务的 ...
随机推荐
- java中的引用类型的对象存放在哪里
根据上下文来确定.比如void func(){ Object obj = new Object();//这个obj在函数的栈里.}class Test{ private Object obj ...
- CentOS7配置php7.0支持redis
配置之前应该是环境已经搭好了,phpinfo的页面可以加载出来. 使用git clone下载git上的phpredis扩展包 [root@VM_103_117_centos ]#git clone ...
- hdu4864 Task贪心好题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4864 题目大意: 有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
- poj1182-食物链-带权并查集-种类并查集
(这应该是我写的第一个和带权并查集相关的题,还不是很了解,所以这篇博客我以后还会做修改,力求更号理解! 题意和思路: 中文题意,我简单提一下: A->B,B->C,C->A.A吃B, ...
- ASP.NET Core + Docker +Jenkins 实现持续集成
1.新建一个ASP.NET Core MVC应用程序: 2.将其上传到git: 3.建立Jenkins任务 (1)选择"新建任务",输入任务名称,选择"自由风格项目&qu ...
- Jenkins持续集成演示
1.去我们的仓库修改一下代码 为了节约时间,我直接在网页上改了. 我们把布局页的footer信息改一下: 然后提交. 2.切换到Jenkins可以看到已经在构建了 等待构建完成. 3.访问我们部署的地 ...
- BeautifulSoup 用法
一.标签选择器 1.子节点contents ,child(迭代器), 2.子孙节点 descendants(迭代器) 3.父节点 parent 4.祖节点 parents 5.兄弟节点 next_s ...
- Spring-cloud(五) 使用Ribbon进行Restful请求
写在前面 本文由markdown格式写成,为本人第一次这么写,排版可能会有点乱,还望各位海涵. 主要写的是使用Ribbon进行Restful请求,测试各个方法的使用,代码冗余较高,比较适合初学者,介意 ...
- python学习笔记1--python简介和第一行代码编写
一.什么是python? python是一种面向对象,解释型语言,它语法简介,容易学习.本节博客就来说说本人学习python的心得体会. 二.python环境安装 目前python版本有python2 ...
- 用Python浅析股票数据
用Python浅析股票数据 本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略. 数据导入 这里将股票数据存储在stockData ...