用idea创建一个基于maven的spring项目的demo

First Idea-Maven-Spring

File-new Project-Maven

用idea创建一个基于maven的spring项目的demo

用idea创建一个基于maven的spring项目的demo 

 

next

 

用idea创建一个基于maven的spring项目的demo

这里显示的是idea自带的maven,选用自己的maven,配置settings.xml文件的位置,可以使用maven安装目录下的settings.xml,也可以使用本地仓库下的settings.xml(这个setting也是从安装目录复制过来的,建议使用仓库中的)。然后选择本地仓库的位置。

下面的参数再增加一个:archetypeCatalog=internal。这样可以访问到国内的仓库,比访问国外仓库快。

next-finish。

创建项目基本完成。

如果想在创建完后添加上面的maven property 参数,可以在pom文件中添加。

 

添加项目目录

用idea创建一个基于maven的spring项目的demo

 

标注目录

点击idea右上角“Project Structure”,然后选择Modules

用idea创建一个基于maven的spring项目的demo

或者右键选择标注类型。

 

 

由于maven自动创建的web.xml是2.3版的,这版对有些标签结点识别不了,所以我们需要3.1版的,所以自己直接复制一个到web-inf下面。

 

配置pom.xml

对于其中的参数通常也是复制,没什么复杂的。

 

创建spring配置文件

有两种方法,建议使用第二种,不管使用哪种都是放在src/resource下。然后web.xml下

<param-value>classpath:applicationContext.xml</param-value>或者

<param-value>classpath*:applicationContext.xml</param-value>

 

一,

因为pom中已经配置好了相应版本的spring,所以如果直接复制spring配置文件过来会不兼容,所以应该右键相应的目录如源码目录resource,new-XML Configuration File - config spring.

而生成的spring配置文件的文件头都没有制定版本:

用idea创建一个基于maven的spring项目的demo

这让我想起曾经有人说在这里不指定版本号是最佳实践。

 

二,右键项目,第二项添加项目支持(add……)

用idea创建一个基于maven的spring项目的demo

因为我们之前下载过相应的文件,所以这里直接用我们下载好的spring文件。 

点击ok之后,我们会发现WEB-INF文件夹下多出了两个文件 用idea创建一个基于maven的spring项目的demo

 

完善目录结构

首先我们在src/main文件夹下创建java文件夹,你会发现这个文件夹不能创建java的类文件和package,别急,先把必须的文件夹全部创建好。请按照下图创建文件夹 用idea创建一个基于maven的spring项目的demo

然后我们进入project structure选择文件夹的作用,在界面的右上角进入project structure用idea创建一个基于maven的spring项目的demo 
然后在module中选择设置各个模块,其中java文件夹是 sources,test是Test,改完之后,点ok,文件夹会变色,那就成功了。 

配置tomcat

…………

配置完成后第一次启动时会生成target目录里面包含很多jar包:

用idea创建一个基于maven的spring项目的demo

这些是pom中定义的依赖包,例如:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

定义<scope>provided</scope>属性就表示只在编译和测试时使用这个jar,发布是不用这个jar,那么target中就不会有这个jar。可以试试,若删除这句,target的lib下就会自动出现相应的jar,如果加上这句,其中的jar就会自动消失。有时候有反应延迟可以切换到电脑桌面然后再回来就看到效果了。但是如果手动从这里删除了,那即使删除这句代码也不会出现被删除的那个jar包了。不过不要紧

说白了就是,如果lib下有servlet-api.jar,就相当于不用maven开发时在lib下放入了这个jar包,但是不需要。如果这样做了导致与tomcat中的这个jar冲突也是正常的。

更多解释见浏览器相关收藏夹。

 

 

运行maven命令

idea右侧栏

用idea创建一个基于maven的spring项目的demo

 

maven package失败,BaseTest中

java.lang.Exception: No runnable methods at org.junit.runne

网上有人说加上abstract声明为抽象类。

看这个类中并没有任何方法,只是个空类供其子类使用的。

然后看其子类如CalculateDaoImplTest也报错:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE!

initializationError(com.cisdigroup.dao.impl.CalculateDaoImplTest)  Time elapsed: 0.001 sec  <<< ERROR!

java.lang.Exception: No runnable methods

因为里面的测试方法都注释掉了,去掉注释就能运行成功了。

 

运行package命令时要关闭服务器。

运行玩package如果target下没有反应就右键同步一下。

 

maven中找不到需要的jar

这时有两种方法。

一,使用maven命令将jar部署到本地仓库。网上有很多教程,如:

http://www.cnblogs.com/tangshengwei/p/6341628.html

二,将jar放到项目的lib下,并配置好Library。然后在pom.xml文件中配置一下。在pom文件中有两种配置方式:

1,没配置成功

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
        <compilerArguments>
            <extdirs>src\main\webapp\WEB-INF\lib</extdirs>
        </compilerArguments>
    </configuration>
</plugin>

2,成功

<!--springmvc中进行多线程测试-->
<dependency>
    <groupId>net.sourceforge.groboutils</groupId>
    <artifactId>groboutils-core</artifactId>
    <version>5</version>
    <scope>system</scope>
   <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/GroboUtils-5-core.jar</systemPath>
</dependency>

1和2的比较:配置一个本地jar时用方式2,如果lib中有多个jar就用1。只是1没成功。

 

一和二两种方法的比较:我觉得第二种方法好。因为项目移植到别的电脑上时,别的电脑上的本地仓库不一定有这些maven中下载不到的jar,在别的电脑上依然需要解决本问题。所以最好是放到lib中并在pom中配置,这样在打包的时候就将该jar一起打包了。这样不论是使用war运行还是使用源码运行都有这个jar。

但是如果放到lib下,执行install时就会提示:

[WARNING] 'dependencies.dependency.systemPath' for net.sourceforge.groboutils:groboutils-core:jar should not point at files within the project directory, ${basedir}/src/main/webapp/WEB-INF/lib/GroboUtils-5-core.jar will be unresolvable by dependent projects

 

 

mvn install:install-file -Dfile=D:\GroboUtils-5-core.jar -DgroupId=net.sourceforge.groboutils -DartifactId=groboutils-core -Dversion=5 -Dpackaging=jar