新建一个Maven工程之后看起来是这样的
可以看出我我们需要的结构有很大差别,比如说JDK的版本不对,source folder也莫名其妙的只有一个,junit的依赖也太老了...
修改pom
对于我现在的程序来说,也许没有hibernate和spring data jpa,没有freemarker,也没有其它什么东西,但是如下几个东西是一定会有的:
-
spring
-
apache commons
-
json
-
logback
-
junit
-
jstl
所以我的初始化pom是这样的:
<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.laolang.gongda</groupId>
<artifactId>bookshoptest</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>bookshoptest Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- 依赖版本信息 -->
<spring.version>4.1.9.RELEASE</spring.version>
<!-- 项目相关 -->
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<dependencies>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.springtestdbunit</groupId>
<artifactId>spring-test-dbunit</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
<!-- java ee -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</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-beans</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>org.springframework</groupId>
<artifactId>spring-aspects</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-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- json -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.2</version>
</dependency>
</dependencies>
<build>
<finalName>bookshoptest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId> <!--这里也可以使用tomcat7-maven-plugin -->
<version>2.2</version> <!--最新版本 -->
<configuration>
<url>http://localhost:8080/manager/text</url> <!--配置远程tomcat的路劲 -->
<username>admin</username>
<password>admin</password>
<uriEncoding>UTF-8</uriEncoding> <!--tomcat的url编码 达到和修改server.xml文件一样的功能 -->
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<!-- mvn cobertura:help 查看cobertura插件的帮助 -->
<!-- mvn cobertura:clean 清空cobertura插件运行结果 -->
<!-- mvn cobertura:check 运行cobertura的检查任务 -->
<!-- mvn cobertura:cobertura 运行cobertura的检查任务并生成报表,报表生成在target/site/cobertura目录下 -->
<!-- cobertura:dump-datafile Cobertura Datafile Dump Mojo -->
<!-- mvn cobertura:instrument Instrument the compiled classes -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
</plugin>
</plugins>
</reporting>
</project>
这个pom除了添加上述的依赖之外,还添加了tomcat插件,cobertura插件,以及指定了项目依赖的JDK版本。
servlet 3.0 支持
这个时候还不能开始写代码,因为在eclipse中创建maven项目是不支持servlet 3.0 的,所以我们还需要修改项目的.setting中的文件,具体文件名是:
.settings/org.eclipse.wst.common.project.facet.core.xml
没有修改的时候是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="2.3"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.7"/>
<installed facet="jst.jaxrs" version="2.0"/>
</faceted-project>
我们需要把 jstl.web那一行的version修改为3.0
然而这还不行,还需要把自动生成的web.xml修改为3.0的
<?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"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
</web-app>
然后更新项目即可
源码文件夹与依赖
STS默认只显示一个src/main/resources,如果你新建一个src/main/java的话,又会提示你已存在,这个时候需要修改项目设置 右键->Properties->java build path->Order And Export,把下面的复选框都选上就行了
sts 中的 s 标记
在STS中,如果一个类由spring管理,或者是spring的配置文件,则会出现一个蓝色的 s 标记,但是新创建的项目有时候有,但有时候又没有这个标记,这就需要我们打开相关设置 右键->Properties->spring,选中 Enable project specific settings,再把下面的都选中
然后选择 Beans Support,再选择右侧的Config Detection,把下面的所有选项都选中
然后再把 Dependenty Management 与 Spring Properties Editor右侧的选项选中,再更新项目,关闭再打开项目就可以看到 s 标记了
最后看起来是这样的;
为项目添加 Maven依赖
这里说的依赖不是pom文件中的,而是STS新建maven项目时,不会把maven依赖加入到项目配置中,具体操作方法: 右键->Properties->Deployment Assembly 如果没有看到 Maven Dependencies,就要点击 Add
最后应该是这样的
关于项目运行
在sts中运行maven构建的web项目有如下几种方式:
- 导出war包,放到tomcat中
- jetty或者tomcat插件
- 新建一个 tomcat server 运行
第一种我从来没用过
第二种我只用过tomcat,也只用它的部署功能,偶尔会用tomcat插件来运行一次进行测试
第三种是我常用的,这种方式最大的好处就是可以很方便的debug。需要注意的是,如果是spring web项目,则要注意Maven Dependencies有没有加载到项目中,正常来说应该是这样的:
如果没有的话,那就按照上述添加 Maven依赖的方式添加。
代码和运行效果我就不贴了。
来源:oschina
链接:https://my.oschina.net/u/1442002/blog/745561