Skip to content
Maven项目规范骨架(Web版)
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings
conf
doc
src
.classpath
.gitignore
.project
LICENSE
Maven项目规范骨架(Web版)
README.md
pom.xml

README.md

mojo-web-archetype

Maven项目规范骨架(Web版)


  • 自动化构建项目(告别重复劳动)
  • 规范项目结构(只要创建,就是规范)
  • 自动管理依赖构件(告别构件版本混乱)
  • 一键发布项目/基线(告别dos/unix脚本命令)

运行环境

 

软件介绍

 快速创建一个规范架构的Java Web项目(Maven版),使得项目中自动内置

  • Spring/SpringMVC架构
  • 经验构件库用于快速开发的辅助包
  • war项目发布插件:第三方插件maven-war-plugin,用于快速发布一个可运行应用到生产环境
  • 基线发布插件:第三方插件maven-release-plugin,用于发布项目基线到版本库和 Nexus私服

注:此骨架只能在J2EE中使用,若在J2SE中,会因为缺少Java Web组件而报错

使用说明

  • 01. 本地已安装并部署好 apache-maven-3.2.5(或更高版本)
  • 02. 下载本骨架项目 mojo-web-archetype 到本地,拷贝 mojo-web-archetype/conf/archetype-catalog.xml 文件到 apache-maven-3.2.5/conf 目录下,若目录下已存在同名文件,则只需把 archetype-catalog.xml 的内容附加进去即可:
<!-- Maven骨架 -->
<archetype>
  <groupId>exp.libs</groupId>
  <artifactId>mojo-web-archetype</artifactId>
  <version>1.0</version>   <!-- 注意版本号要根据实际发布的骨架版本号调整 -->
  <repository>http://127.0.0.1:8081/nexus/content/repositories/releases</repository> <!-- 若本地部署了Nexus私服则如实填写,这是releases库 -->
</archetype>
<archetype>
  <groupId>exp.libs</groupId>
  <artifactId>mojo-web-archetype</artifactId>
  <version>1.0-SNAPSHOT</version>  <!-- 同名骨架可配置多个版本号,但只有最高版本生效 -->
  <repository>http://127.0.0.1:8081/nexus/content/repositories/snapshots</repository> <!-- 若本地部署了Nexus私服则如实填写,这是snapshots库 -->
</archetype>
  • 03. 通过 maven install 命令安装骨架到本地 Maven Repository
  • 04. (可选)若本地部署了 Nexus 私服,可通过 maven deploy 命令直接发布骨架到私服
  • 05. 新建Maven项目,并选择此骨架进行项目构建:
    新建Maven项目
  • 06. 填写项目必要信息:
    填写项目必要信息
  • 07. 通过骨架所生成的项目,项目中会引用到 构件经验库 exp-libs 的一些功能,其组织结构如下:
    通过骨架所生成的项目
  • 08. 通过 maven installtarget 目录直接发布war包(拷贝到tomcat即可运行):
    发布可运行项目到生产环境

运行效果

 通过 Run on Server 方式可在 Eclipse 中直接运行项目(当然把war包放到tomcat运行也是可以的):

注:在 web.xml 切换 spring 配置文件可测试不同的控制器效果

运行效果

补充:通过本骨架所生成示例项目的 pom.xml 与 web.xml 文件

点击 这里 下载示例项目

  • 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>exp.libs</groupId>
    <artifactId>demo-web-archetype</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>项目名称(可选)</name>
    <description>项目描述(可选)</description>
    <url>项目SVN路径(可选)</url>
    <inceptionYear>工程的初始时间(可选)</inceptionYear>

    <!--项目的问题管理系统(可选)-->
    <issueManagement>
        <system>EXPLIBS-API-ONLINE</system>
        <url>https://lyy289065406.github.io/api-online/</url>
    </issueManagement>
    
    <!--项目的问题追踪系统(可选)-->
    <ciManagement>
        <system>jenkins</system>
        <url>http://127.0.0.1:8080/jenkins/</url>
    </ciManagement>

    <!-- 软件配置管理 -->
    <scm>
        <!-- 项目SVN主干目录(需保证目录已存在) -->
        <connection>scm:svn:http://127.0.0.1:81/svn/release/???/trunk</connection>
        <developerConnection>scm:svn:http://127.0.0.1:81/svn/release/???/trunk</developerConnection>
        <url>scm:svn:http://127.0.0.1:81/svn/release/???/trunk</url>
    </scm>

    <!-- 变量定义 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jdk.version>1.6</jdk.version>
        <spring.version>3.1.2.RELEASE</spring.version>
        <explibs.version>1.0</explibs.version>
    </properties>


    <!-- 项目依赖 -->
    <dependencies>

        <!-- 经验库 -->
        <dependency>
          <groupId>exp.libs</groupId>
          <artifactId>exp-libs</artifactId>
          <version>${explibs.version}</version>
        </dependency>
        
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- Spring MVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <classifier>sources</classifier>
        </dependency>
        
        <!-- 把Spring源代码中使用到的commons-logging替换成slf4j -->
        <dependency>  
          <groupId>org.slf4j</groupId>  
          <artifactId>jcl-over-slf4j</artifactId>  
          <version>1.7.12</version>  
        </dependency>
        
        <!-- logback for spring -->
        <dependency>
          <groupId>org.logback-extensions</groupId>  
          <artifactId>logback-ext-spring</artifactId>
          <version>0.1.2</version>
        </dependency>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>


    <!-- 项目构建 -->
    <build>
        <!-- build目标文件的文件名, 默认情况下为${artifactId}-${version}  -->
        <finalName>demo-web-archetype</finalName>
    
        <plugins>

            <!-- 版本打包插件,在dos跳转到项目根目录,依次执行(需保证没有引用快照、本地与SVN服务器内容完全一致): 
                1 发布基线到svn: mvn release:prepare 
                2 发布引用到私服 : mvn release:perform -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <!-- 项目的SVN基线目录(需保证目录已存在) -->
                    <tagBase>http://172.168.27.5:81/svn/release/???/tags</tagBase>
                </configuration>
            </plugin>

            <!-- 测试插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.7.2</version>
                <configuration>
                    <!-- 解决控制台输出乱码问题 -->
                    <forkMode>once</forkMode>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                    <systemProperties>
                        <property>
                            <name>net.sourceforge.cobertura.datafile</name>
                            <value>target/cobertura/cobertura.ser</value>
                        </property>
                    </systemProperties>
                    <!-- 项目打包时是否跳过d单元测试 -->
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

            <!-- 编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>

            <!-- war打包插件 -->
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warName>${project.artifactId}</warName>
                    <warSourceDirectory>WebRoot</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

        </plugins>

    </build>

    <!-- 项目发布管理 -->
    <distributionManagement>

        <!-- 私服地址 ,公司级基线仓库 -->
        <repository>
            <id>Releases</id>
            <url>http://127.0.0.1:8081/nexus/content/repositories/releases</url>
        </repository>

        <!-- 私服地址 ,公司级快照仓库 -->
        <snapshotRepository>
            <id>Snapshots</id>
            <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

</project>
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <!-- web-app显示名称 -->
    <display-name>demo-web-archetype</display-name>


    <!-- 默认首页 -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>


    <!-- 字符集过滤器 : 处理页面乱码问题 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!-- 加载logback日志配置 -->
    <context-param>  
        <param-name>logbackConfigLocation</param-name>  
        <param-value>classpath:logback.xml</param-value>  
    </context-param>  
    <listener>  
        <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
    </listener>  
    

    <!-- 表示工程默认以spring的方式启动 -->
    <!-- 注:这是[非SpringMVC]架构的配置, 若希望直接使用SpringMVC, 则无视此配置项即可 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>     <!-- 指定spring配置文件(若无指定则启动时默认会在/WEB-INF目录下查找applicationContext.xml) -->
        <param-name>contextConfigLocation</param-name>
        <param-value>   <!-- classpath指代WEB-INF下的classes与lib目录, 优先级lib大于classes -->
          classpath*:applicationContext*.xml    <!-- 这是全局的, 应用于多个servlet -->
        </param-value>
    </context-param>
    

    <!-- 使得工程具备SpringMVC特性 -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 指定配置文件(若不配置则默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件) -->
        <init-param>
            <param-name>contextConfigLocation</param-name>  
            <param-value>      <!-- 仅仅SpringMVC使用的配置文件, 四选一即可 -->
                 <!-- classpath*:spring-bean.xml -->    <!-- 基于BeanName-URL方式配置的Controller --> 
                 <!-- classpath*:spring-class.xml -->   <!-- 基于ClassName方式配置的Controller --> 
                 classpath*:spring-mvc.xml              <!-- 基于注解方式配置的Controller --> 
                 <!-- classpath*:spring-url.xml -->     <!-- 基于Simple-URL方式配置的Controller --> 
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>    <!-- 表示启动容器时初始化该Servlet -->
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>  <!-- 表示哪些请求交给SpringMVC处理, "/"表示此为其他servlet都匹配不到时的缺省模式 -->
        <url-pattern>/</url-pattern>    <!-- 可以配置为诸如"*.html"表示拦截所有以html为扩展名的请求 -->
    </servlet-mapping>


    <!-- 用于测试demo中的SpringMVC跳转(可删除) -->
    <servlet>
        <servlet-name>TestSpringMVC</servlet-name>
        <jsp-file>/WEB-INF/pages/demo-mvc-request.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestSpringMVC</servlet-name>
        <url-pattern>/demo-spring-mvc</url-pattern>
    </servlet-mapping>
    
</web-app>

版权声明

 Copyright (C) 2016-2019 By EXP License: GPL v3


You can’t perform that action at this time.