121 项目 004 笔记向 sts 新建 Maven 工程

。_饼干妹妹 提交于 2019-12-09 11:45:25

新建一个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依赖的方式添加。

代码和运行效果我就不贴了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!