Git+Maven+Intellij+SpringMVC构建简单项目(上)

1. 为什么

这阵子因为要维护几个管理系统(Spring MVC项目),就看了一下相关代码。我希望对于一个新的东西,能够快速掌握其用法。因为无论看了多少代码,多少书,都不如做起来更有效果。

1.1 Git

无论什么时候开始一个项目,首先要有代码版本管理的意识。当然,作为个人爱好,我更喜欢用Git。即使是做简单项目测试,我也用Git来管理,以便养成良好的开发习惯。

1.2 Maven

Maven目前还是事实上的Java构建标准工具,做Java开发一定要懂Maven。一个项目由maven开始,能减少很多事情,比如四处去找依赖包—以前我真去一个个下载过。直到用上maven,我才知道以前多傻逼。

1.3 Intellij

开发IDE我更偏向Intellij IDEA。最开始转Java方向的时候,即使团队大部分人用Eclipse,我也决定使用Intellij IDEA,阿里内部也更提倡使用Intellij IDEA。这个才是专业的Java IDE,用好了能省很多很多功夫。

1.4 Spring MVC

Spring是一个非常有用的东西。这里面主要涉及两个好处:

  1. 面向切面编程(AOP)
  2. 依赖注入(DI)

前者使得非业务性代码如日志、性能监控等对于核心业务的侵入性降低,同时又能形成重用组件,横跨到在系统的各个组件中—这也是面向切面编程的含义。如果了解Python,就知道装饰器,其实也可以把Spring AOP理解为Java的装饰器。

依赖注入是指Spring容器帮助我们创建好对象,并管理对象之间的依赖—通过依赖注入的方式实现。这样能够实现对象组件之间的松耦合和易于测试的特性。

Spring MVC是Spring的Web开发框架,采用MVC架构。实际上就是让你按照它的规约写代码,就能快速实现Web功能。HTTP和TCP的底层是相当繁琐的,框架的目的就是为了减少这种重复性的繁琐,但同时要求你按照它的思想和设计来写代码。MVC就是一种典型的开发思想,Spring MVC框架就是这种思想在Java和Spring世界的实现。

我们此处就以SpringMVC的规范来开发一个简单的管理系统。

1.5 开发系统

目前我的开发主力系统是Ubuntu 16.04 TLS,Intellij IDEA就装在Ubuntu上。一方面是用习惯了,另一方面代码终究是要运行在服务器上,而目前服务器系统几乎全部都是Linux系的。那么,多了解一点代码的生产运行环境也是很好的。

2. 走起来

2.1 创建项目

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 选择archetype快速创建

选择Maven的maven-archetype-webapp能帮我们快速创建一个基于Maven的web项目结构。后续我们会把它配置成标准的Maven结构,并引入Spring MVC框架。

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 添加一个配置

添加这个配置能帮助快速创建项目,否则会到中央仓库下载,十分缓慢。这个配置告诉Maven用内部的原型创建。

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 创建完了是这样子的

2.2 用Git管理代码

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 用Git初始化项目
《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 增加.gitignore文件

git init之后,先不要急着git add --allgit commit。先把一些不需要跟踪的文件放在.gitignore文件中,这个文件一般需要自己创建。不需要的文件如上图所示。

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 Github上创建一个库

我们需要把代码保存到远程库中,此时可以在Github上创建一个库用来保存代码。

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 初始化库并增加远程库

git stgit status的简写命令。此处注意用

git remote add origin https://github.com/ubear/SpringMVCDemo.git

给本地库增加了远程库。以后的代码就能够用git push origin master提交到远程。

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 与远程库同步

因为在Github上创建时,自动创建了个README文件,所以先要把远程的文件拉下来:

git pull origin master

然后再把代码推上去:

git push -u origin master

这个命令只需要用一次,后续直接用git push就能把本地master分支代码推到远程仓库master分支上。

这些命令使用完后,我们的代码就与远程同步了。现在可以配置SpringMVC了。

2.3 配置Spring MVC

《Git+Maven+Intellij+SpringMVC构建简单项目(上)》 创建正确的项目结构

使用maven-archetype-webapp创建的项目并不是标准的maven项目,我们做一些调整:在main目录下创建java目录,并标记为源代码目录(java目录上右键->Make Directory as->Source Root)。src目录下创建test文件夹,在test下创建java,标记为Test Source Root。

再来修改pom.xml文件,引入SpringMVC库和其他配置。刚开始的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.chenyi.learn</groupId>
  <artifactId>SpringMVCDemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SpringMVCDemo 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>SpringMVCDemo</finalName>
  </build>
</project>

配置好是这样的:


<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.chenyi.learn</groupId>
  <artifactId>SpringMVCDemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SpringMVCDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>

    <!--一些预定义的变量值 在本文件或者子项目的pom中引用-->
    <properties>
        <spring.version>4.3.7.RELEASE</spring.version>
    </properties>

  <dependencies>
      <!--Spring 依赖-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</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-core</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-aop</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
      </dependency>

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.22</version>
      </dependency>
  
   <dependency>
          <groupId>commons-lang</groupId>
          <artifactId>commons-lang</artifactId>
          <version>2.5</version>
      </dependency>

      <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
          <version>1.4</version>
      </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!--设置build参数-->
  <build>
    <finalName>SpringMVCDemo</finalName>

      <plugins>
        <!--编译插件配置-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>

        <!--打包插件配置-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <warName>SpringMVCDemo</warName>
                <webResources>
                    <resource>
                        <!-- 元配置文件的目录,相对于pom.xml文件的路径 -->
                        <directory>src/main/webapp/WEB-INF</directory>
                        <!-- 是否过滤文件,也就是是否启动auto-config的功能 -->
                        <filtering>true</filtering>
                        <!-- 目标路径 -->
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
      </plugins>

      <!--资源文件打包-->
      <resources>
          <!--全部资源文件都打包-->
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.*</include>
              </includes>
              <filtering>false</filtering>
          </resource>
          <!--但只对properties文件过滤-->
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.properties</include>
              </includes>
              <filtering>true</filtering>
          </resource>
      </resources>
  </build>

    <!--针对特定环境的Profile 采用不同配置-->
    <profiles>
        <!--生产环境-->
        <profile>
            <id>product</id>
            <properties>
                <mysql.db.url>
                      jdbc:mysql://11.176.112.10:3306/springdemo
                </mysql.db.url>
                <mysql.db.user>wlmJ19*&</mysql.db.user>
                <mysql.db.pwd>&^2e!y</mysql.db.pwd>
            </properties>
        </profile>

        <!--开发环境-->
        <profile>
            <id>dev</id>
            <properties>
                <mysql.db.url>jdbc:mysql://127.0.0.1:3306/springdemo</mysql.db.url>
                <mysql.db.user>root</mysql.db.user>
                <mysql.db.pwd>123456</mysql.db.pwd>
            </properties>
        </profile>
    </profiles>
</project>

这个配置中值得学习的东西很多,但此处并不详细展开。注意profile的配置能够让我们根据不同的设置(环境)打成不同的war包。要打开发环境用的包,我们使用以下maven命令:

mvn clean package -DskipTests -P dev

-P后面的参数换成product就能打出生产环境中的包。要想起到过滤作用,我们在resources文件夹下建立conf.properties文件,内容为:

# mysql config
dburl=${mysql.db.url}
dbuser=${mysql.db.user}
dbpwd=${mysql.db.pwd}

打包完成后,不同的环境下对应的变量会替换成对应profile中设置的值。我们可以看到WEB-INF文件夹下多了一些东西,其中classes下有个conf.properties,里面存放了用profile中的属性替换之后的配置。如按照dev打包,其内容是:

# mysql config
dburl=jdbc:mysql://127.0.0.1:3306/springdemo
dbuser=root
dbpwd=123456

当然,还有另一种方式实现这个功能。可以根据不同的环境设置不同的properties文件,如dev.propertiesproduct.properties等。然后在类似web.xmlapplicationContext.xml这样的配置文件中引用properties文件中定义的变量。pom.xml中可以根据不同profile定义不同的properties来过滤这些xml配置文件中的变量,最后在war包中根据不同的环境生成不同的xml配置文件。在这里就不用种方式。如果需要,可以自己行Google。

3. 总结

在这篇文章中,我们创建了一个SpringMVC项目,且用Git来管理代码,用Maven管理依赖和构建等。并且还介绍了如何根据pom.xml实现不同的环境打不同的war包。对于像我这样的JavaWeb初学者,算是已经完成第一步了。图截的不太好,Ubuntu上毕竟没有Windows和Mac截图方便,不过也没啥啦。

接下来我们开始好好配置SpringMVC了,边做边学习。

    原文作者:承羿
    原文地址: https://www.jianshu.com/p/a89e6c286944
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞