我们在写代码的时候,有些项目会有重复代码,或者是重复项目结构,这样我们就可以用maven 生成一个项目的基本骨架,就像我之前介绍的哪个logindemo一样继承了webApp-achetype一样。我们也可以生成我们自己的项目骨架。

准备下我们的项目骨架结构:看图:



看下我这边的已有的代码:



我的这个程序是一个普通http接口。然后往往在公司会有很多这样的接口,然后每个接口都去实现同样的一份代码程序会感觉很费时间,包括拷贝代码建立项目目录等,都会很花费时间的,通用的代码可以做成jar 被依赖继承,但是那些不通用的地方就需要自己实现了,但是自己实现的项目结构往往是一样的,这样就可以用到这个骨架了。

来看下我这pom.xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.nnk.template</groupId>
  7. <artifactId>template</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>war</packaging>
  10. <name>XLTDRecharge Maven Webapp</name>
  11. <url>http://maven.apache.org</url>
  12. <parent>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-parent</artifactId>
  15. <version>1.1.2.RELEASE</version>
  16. <relativePath />
  17. <!-- lookup parent from repository -->
  18. </parent>
  19. <distributionManagement>
  20. <repository>
  21. <id>nnk-releases</id>
  22. <name>NNK Releases Repository</name>
  23. <url>${repositories.releases.url}</url>
  24. </repository>
  25. <snapshotRepository>
  26. <id>nnk-snapshots</id>
  27. <name>NNK Snapshots Repository</name>
  28. <url>${repositories.snapshots.url}</url>
  29. </snapshotRepository>
  30. </distributionManagement>
  31. <properties>
  32. <java.version>1.6</java.version>
  33. <start-class>com.nnk.template.recharge.Main</start-class>
  34. <main.basedir>${basedir}/../..</main.basedir>
  35. <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
  36. <httpclient.version>4.4.1</httpclient.version>
  37. </properties>
  38. <dependencies>
  39. <dependency>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-starter-web</artifactId>
  42. <exclusions>
  43. <exclusion>
  44. <artifactId>log4j-over-slf4j</artifactId>
  45. <groupId>org.slf4j</groupId>
  46. </exclusion>
  47. </exclusions>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-starter-log4j</artifactId>
  52. <exclusions>
  53. <exclusion>
  54. <artifactId>log4j</artifactId>
  55. <groupId>log4j</groupId>
  56. </exclusion>
  57. </exclusions>
  58. </dependency>
  59. <!--<dependency>-->
  60. <!--<groupId>org.springframework.boot</groupId>-->
  61. <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
  62. <!--<scope>provided</scope>-->
  63. <!--</dependency>-->
  64. <!--<dependency>-->
  65. <!--<groupId>org.apache.tomcat.embed</groupId>-->
  66. <!--<artifactId>tomcat-embed-jasper</artifactId>-->
  67. <!--<scope>provided</scope>-->
  68. <!--</dependency>-->
  69. <!--<dependency>-->
  70. <!--<groupId>javax.servlet</groupId>-->
  71. <!--<artifactId>jstl</artifactId>-->
  72. <!--</dependency>-->
  73. <!--httpClient dependency start-->
  74. <dependency>
  75. <groupId>commons-codec</groupId>
  76. <artifactId>commons-codec</artifactId>
  77. <version>1.6</version>
  78. </dependency>
  79. <dependency>
  80. <groupId>org.jvnet.hudson.dom4j</groupId>
  81. <artifactId>dom4j</artifactId>
  82. <version>1.6.1-hudson-3</version>
  83. </dependency>
  84. <dependency>
  85. <groupId>log4j</groupId>
  86. <artifactId>log4j</artifactId>
  87. <version>1.2.16</version>
  88. </dependency>
  89. <dependency>
  90. <groupId>commons-logging</groupId>
  91. <artifactId>commons-logging</artifactId>
  92. <version>1.1.3</version>
  93. </dependency>
  94. <dependency>
  95. <groupId>org.apache.httpcomponents</groupId>
  96. <artifactId>fluent-hc</artifactId>
  97. <version>${httpclient.version}</version>
  98. <exclusions>
  99. <exclusion>
  100. <artifactId>commons-logging</artifactId>
  101. <groupId>commons-logging</groupId>
  102. </exclusion>
  103. </exclusions>
  104. </dependency>
  105. <dependency>
  106. <groupId>com.google.code.gson</groupId>
  107. <artifactId>gson</artifactId>
  108. <version>2.2.4</version>
  109. </dependency>
  110. <dependency>
  111. <groupId>com.google.guava</groupId>
  112. <artifactId>guava</artifactId>
  113. <version>15.0</version>
  114. </dependency>
  115. <dependency>
  116. <groupId>org.apache.httpcomponents</groupId>
  117. <artifactId>httpclient</artifactId>
  118. <version>${httpclient.version}</version>
  119. <exclusions>
  120. <exclusion>
  121. <artifactId>commons-codec</artifactId>
  122. <groupId>commons-codec</groupId>
  123. </exclusion>
  124. </exclusions>
  125. </dependency>
  126. <dependency>
  127. <groupId>org.apache.httpcomponents</groupId>
  128. <artifactId>httpcore</artifactId>
  129. <version>${httpclient.version}</version>
  130. </dependency>
  131. <dependency>
  132. <groupId>org.apache.httpcomponents</groupId>
  133. <artifactId>httpmime</artifactId>
  134. <version>${httpclient.version}</version>
  135. </dependency>
  136. <!--<dependency>-->
  137. <!--<groupId>commons-codec</groupId>-->
  138. <!--<artifactId>commons-codec</artifactId>-->
  139. <!--<version>1.6</version>-->
  140. <!--</dependency>-->
  141. <dependency>
  142. <groupId>com.nnk.base</groupId>
  143. <artifactId>msgsrv-tools</artifactId>
  144. <version>2.4</version>
  145. </dependency>
  146. <dependency>
  147. <groupId>com.nnk.transport</groupId>
  148. <artifactId>interface-extern-spring</artifactId>
  149. <version>1.3</version>
  150. </dependency>
  151. <dependency>
  152. <groupId>com.nnk.base</groupId>
  153. <artifactId>msgsrv-client</artifactId>
  154. <version>1.3</version>
  155. </dependency>
  156. <dependency>
  157. <groupId>junit</groupId>
  158. <artifactId>junit</artifactId>
  159. <version>4.12</version>
  160. </dependency>
  161. </dependencies>
  162. <build>
  163. <finalName>LMRecharge</finalName>
  164. <sourceDirectory>src/main/java</sourceDirectory>
  165. <testSourceDirectory>src/test/java</testSourceDirectory>
  166. <pluginManagement>
  167. <plugins>
  168. <plugin>
  169. <artifactId>maven-compiler-plugin</artifactId>
  170. <configuration>
  171. <source>1.6</source>
  172. <target>1.6</target>
  173. <encoding>GBK</encoding>
  174. </configuration>
  175. </plugin>
  176. </plugins>
  177. </pluginManagement>
  178. <plugins>
  179. <plugin>
  180. <groupId>org.springframework.boot</groupId>
  181. <artifactId>spring-boot-maven-plugin</artifactId>
  182. <configuration>
  183. <classifier>boot</classifier>
  184. </configuration>
  185. </plugin>
  186. <!--生成可执行JAR包命令 maven-jar-plugin-->
  187. <plugin>
  188. <groupId>org.apache.maven.plugins</groupId>
  189. <artifactId>maven-jar-plugin</artifactId>
  190. <version>2.4</version>
  191. <executions>
  192. <execution>
  193. <id>interface-extern-spring</id>
  194. <goals><goal>jar</goal></goals>
  195. <phase>package</phase>
  196. <configuration>
  197. <excludes>
  198. <exclude>**/src/test/resource/**</exclude>
  199. <exclude>**/*Test.java</exclude>
  200. </excludes>
  201. </configuration>
  202. </execution>
  203. </executions>
  204. <configuration>
  205. <excludes>
  206. <exclude>src/main/resources</exclude>
  207. <exclude>src/test/resource</exclude>
  208. <exclude>**/*Test.java</exclude>
  209. </excludes>
  210. </configuration>
  211. </plugin>
  212. </plugins>
  213. </build>
  214. </project>

这里面别的我就不介绍了,主要讲下这段配置

  1. <distributionManagement>
  2. <repository>
  3. <id>nnk-releases</id>
  4. <name>NNK Releases Repository</name>
  5. <url>${repositories.releases.url}</url>
  6. </repository>
  7. <snapshotRepository>
  8. <id>nnk-snapshots</id>
  9. <name>NNK Snapshots Repository</name>
  10. <url>${repositories.snapshots.url}</url>
  11. </snapshotRepository>
  12. </distributionManagement>

这里主要是deploy和install用到个人私服仓库,这里会指定你上传到哪里的url 。我的url在maven 配置settings文件里面配置了,所以这里只要用${引用就可以了};

如果没有settings.xml中没有配置就需要这样配置了:

  1. <repositories>
  2. <repository>
  3. <id>local-nexus</id>
  4. <name>private repository nexus</name>
  5. <url>http://xxx:8081/nexus/content/groups/public/</url>
  6. <releases>
  7. </releases>
  8. <snapshots>
  9. </snapshots>
  10. </repository>
  11. </repositories>
  12. <pluginRepositories>
  13. <pluginRepository>
  14. <id>local-nexus</id>
  15. <name>private plugin nexus</name>
  16. <url>http://xxx:8081/nexus/content/groups/public/</url>
  17. <releases>
  18. </releases>
  19. <snapshots>
  20. </snapshots>
  21. </pluginRepository>
  22. </pluginRepositories>
  23. <distributionManagement>
  24. <repository>
  25. <id>releases</id>
  26. <name>Nexus Release Repository</name>
  27. <url>http://xxx:8081/nexus/content/repositories/releases/</url>
  28. </repository>
  29. <snapshotRepository>
  30. <id>snapshots</id>
  31. <name>Nexus Snapshot Repository</name>
  32. <url>http://xxx:8081/nexus/content/repositories/snapshots/</url>
  33. </snapshotRepository>
  34. </distributionManagement>
step 2 :接下来就是生成这个项目骨架了
  1. cmd到项目目录,mvn clean,然后 mvn archetype:create-from-project

  2. 成功之后cd到target/generated-sources/archetype, mvn clean compile

    然后查看下这个目录下有什么东西



    3.然后检查下target/generated-sources/archetype这个目录下这pom.xml文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.nnk.template</groupId>
  5. <artifactId>template-archetype</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>maven-archetype</packaging>
  8. <name>template-archetype</name>
  9. <build>
  10. <extensions>
  11. <extension>
  12. <groupId>org.apache.maven.archetype</groupId>
  13. <artifactId>archetype-packaging</artifactId>
  14. <version>2.4</version>
  15. </extension>
  16. </extensions>
  17. <pluginManagement>
  18. <plugins>
  19. <plugin>
  20. <artifactId>maven-archetype-plugin</artifactId>
  21. <version>2.4</version>
  22. </plugin>
  23. </plugins>
  24. </pluginManagement>
  25. </build>
  26. <description>Spring Boot Starter Parent</description>
  27. <url>http://maven.apache.org</url>
  28. <developers>
  29. <developer>
  30. <id>pwebb</id>
  31. <name>Phillip Webb</name>
  32. <email>pwebb at gopivotal.com</email>
  33. <organization>Pivotal Software, Inc.</organization>
  34. <organizationUrl>http://www.spring.io</organizationUrl>
  35. <roles>
  36. <role>Project lead</role>
  37. </roles>
  38. </developer>
  39. <developer>
  40. <id>dsyer</id>
  41. <name>Dave Syer</name>
  42. <email>dsyer at gopivotal.com</email>
  43. <organization>Pivotal Software, Inc.</organization>
  44. <organizationUrl>http://www.spring.io</organizationUrl>
  45. <roles>
  46. <role>Project lead</role>
  47. </roles>
  48. </developer>
  49. </developers>
  50. <licenses>
  51. <license>
  52. <name>Apache License, Version 2.0</name>
  53. <url>http://www.apache.org/licenses/LICENSE-2.0</url>
  54. </license>
  55. </licenses>
  56. <scm>
  57. <url>https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/template</url>
  58. </scm>
  59. </project>

如果此时mvn deploy 的化会出现Error 如下图



并没有下面这个:

  1. <distributionManagement>
  2. <repository>
  3. <id>nnk-releases</id>
  4. <name>NNK Releases Repository</name>
  5. <url>${repositories.releases.url}</url>
  6. </repository>
  7. <snapshotRepository>
  8. <id>nnk-snapshots</id>
  9. <name>NNK Snapshots Repository</name>
  10. <url>${repositories.snapshots.url}</url>
  11. </snapshotRepository>
  12. </distributionManagement>

这时就需要在pom.xml里面加上这段:

完整的应该是:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.nnk.template</groupId>
  5. <artifactId>template-archetype</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>maven-archetype</packaging>
  8. <name>template-archetype</name>
  9. <build>
  10. <extensions>
  11. <extension>
  12. <groupId>org.apache.maven.archetype</groupId>
  13. <artifactId>archetype-packaging</artifactId>
  14. <version>2.4</version>
  15. </extension>
  16. </extensions>
  17. <pluginManagement>
  18. <plugins>
  19. <plugin>
  20. <artifactId>maven-archetype-plugin</artifactId>
  21. <version>2.4</version>
  22. </plugin>
  23. </plugins>
  24. </pluginManagement>
  25. </build>
  26. <description>Spring Boot Starter Parent</description>
  27. <url>http://maven.apache.org</url>
  28. <developers>
  29. <developer>
  30. <id>pwebb</id>
  31. <name>Phillip Webb</name>
  32. <email>pwebb at gopivotal.com</email>
  33. <organization>Pivotal Software, Inc.</organization>
  34. <organizationUrl>http://www.spring.io</organizationUrl>
  35. <roles>
  36. <role>Project lead</role>
  37. </roles>
  38. </developer>
  39. <developer>
  40. <id>dsyer</id>
  41. <name>Dave Syer</name>
  42. <email>dsyer at gopivotal.com</email>
  43. <organization>Pivotal Software, Inc.</organization>
  44. <organizationUrl>http://www.spring.io</organizationUrl>
  45. <roles>
  46. <role>Project lead</role>
  47. </roles>
  48. </developer>
  49. </developers>
  50. <licenses>
  51. <license>
  52. <name>Apache License, Version 2.0</name>
  53. <url>http://www.apache.org/licenses/LICENSE-2.0</url>
  54. </license>
  55. </licenses>
  56. <distributionManagement>
  57. <repository>
  58. <id>nnk-releases</id>
  59. <name>NNK Releases Repository</name>
  60. <url>${repositories.releases.url}</url>
  61. </repository>
  62. <snapshotRepository>
  63. <id>nnk-snapshots</id>
  64. <name>NNK Snapshots Repository</name>
  65. <url>${repositories.snapshots.url}</url>
  66. </snapshotRepository>
  67. </distributionManagement>
  68. <scm>
  69. <url>https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/template</url>
  70. </scm>
  71. </project>

然后再 mvn deploy 之后就把这个骨架上传到我们的私服仓库了。

step 3:怎么使用这个骨架

我新建一个项目:



点击ok 然后:



之后的步骤就不多介绍了和前面logindemo的步骤是一样的。

最终生成的项目结构就是这样子的:



这样我们的项目结构骨架就是这样生成了,这样只需要在项目骨架上面做开发了,是不是会爽很多,

有什么不懂得地方欢迎和我交流,

maven学习之路三的更多相关文章

  1. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  2. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  3. Maven学习总结(三):修改从Maven中心仓库下载到本地的jar包的默认存储位置

    一:修改从Maven中心仓库下载到本地的jar包的默认存储位置 从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home ...

  4. zigbee学习之路(三):按键的控制

    一.前言 通过前一次的实验,相信大家都已经对cc2530程序的编写有了一定的认识,这次我们来操作和实验的是cc2530上的按键模块. 二.原理分析 我们先来看一下按键的原理图: 根据原理图我们可以得出 ...

  5. 学习之路三十二:VS调试的简单技巧

    这段时间园子里讲了一些关于VS的快捷键以及一些配置技巧,挺好的,大家一起学习,一起进步. 这段时间重点看了一下关于VS调试技巧方面的书,在此记录一下学习的内容吧,主要还是一些比较浅显的知识. 1. 调 ...

  6. Maven 学习总结(三) 之 依赖管理

    聚合 为了要一次构建多个项目,而不是到每个模块目录下分别执行mvn命令.maven聚合这一特性就是为该需求服务的.为此我们需要创建一个额外的模块aggregator, 然后通过该模块构建整个项目的所有 ...

  7. 交互原型设计软件axure rp学习之路(三)

    (三)Axure rp元件的触发事件 l  OnClick(点击时): 鼠标点击事件,除了动态面板的所有的其他元件的点击时触发.比如点击按钮. l  OnMouseEnter(鼠标移入时): 鼠标进入 ...

  8. Maven学习归纳(三)——依赖添加依赖排除与项目整合

    一.Maven的坐标 1. 坐标的定义 数学意义上的坐标可以是平面上的(x,y)也可以是空间上的(x,y,z),都可以确定一个质点的位置和方向. Maven中有很多构件,为了能够自动化解析任何一个构件 ...

  9. maven 学习之路一

    一.mave介绍: maven :我的理解就是一个代码构建管理的一个工具.类似的工具有gradle,ant等. 官方理解:Apache Maven is a software project mana ...

随机推荐

  1. Selenium 2自动化测试实战29(组织单元测试用例和discover更多测试用例)

    一.组织单元测试用例 看看unittest单元测试框架是如何扩展和组织新增的测试用例以之前的calculator.py文件为例,为其扩展sub()方法,用来计算两个数相减的结果. #coding:ut ...

  2. kvm热迁移(4)

    一.迁移简介 迁移分为热迁移和冷迁移,冷迁移是在机器关机的状态下进行迁移,具体操作在之前的博客有体现.热迁移是在机器处于开机状态进行迁移,本次博客主要讲解热迁移. 系统的迁移是指把源主机上的操作系统和 ...

  3. padding的计算方法

    转自https://blog.csdn.net/qq_34599526/article/details/83755275 VALID:如果卷积核超出特征层,就不再就计算,即卷积核右边界不超出Featu ...

  4. iOS上传图片问题

    今天一定得写一篇博客,有以下原因: 1>第一次做图片上传的功能,算是一种记录吧; 2>在这个问题上,纠结,迷茫了很久,主要还是被后台坑了; 1.上传图片的方法是用的AFNetWorking ...

  5. go使用go-redis操作redis 连接类型,pipline, 发布订阅

    内容: 一 . 客户端Client(普通模式,主从模式,哨兵模式)二. conn连接(连接, pipline, 发布订阅等)三. 示例程序(连接, pipline, 发布订阅等)客户端Client 普 ...

  6. danbooru 图片下载工具。

    danbooru 是什么,查搜索引擎去吧. 试了四个站点 yande.re,konachan.com,danbooru.donmai.us,gelbooru.com ,其他就不知道了. 有的站点对搜索 ...

  7. ArcEngine二次开发之提取外包矩

    1.通过ITopologicalOperator接口,此方法适用于需要获得包含几个或多个要素的最小外包矩形 public IEnvelope GetEnvelope(IGeometryCollecti ...

  8. Foxmail:导入联系人

    打开“Foxmail”之后,如下图所示: 接下来,在左下角找到箭头指示的位置处,点击此处: 接下来,在邮箱的右上角找到如图所示的位置,鼠标点击此处: 点击之后,如下图所示,找到“导入”: 点击“导入& ...

  9. webdriervAPI(元素等待)

    from  selenium  import  webdriver from selenium.common.exceptions import NoSuchElementException driv ...

  10. C++学习笔记-namespace

    指标识符的各种可见范围.C++标准程序库中的所有标识符都被定义于一个名为std的namespace中 关于iostream <iostream>和<iostream.h>格式不 ...