idea学习系列四之maven及服务器的使用
上一篇,介绍了idea中版本管理工具svn和git的使用,这里将介绍idea中maven和服务器的使用。
maven
现在项目几乎都是通过maven来管理项目依赖的。所以在idea中使用的maven是必须要会的。废话不多说直接开始
配置
-
maven配置很简单,只需要配置好使用的是那个maven,以及setting文件和仓库位置就可以了。
-
在导入的时候还可以选择是否下载文档和源码。当然如果下载源码和文档在导入包的时候就会慢很多。
-
pom文件发生改变时,自动导入依赖包
-
添加参数,添加这个参数
-DarchetypeCatalog=internal
后在maven项目构建的时候会快很多,这个可以直接配置在default Settings中
原因是:
-
默认情况下,我们创建的maven项目的结构可能是不完整的,所以需要手动的补全项目结构。补全项目结构我们可以在Project Structure下的Modules下的Sources中将项目文件夹创建好,然后再设置为相应的资源目录就可以了
完整的目录结构为:
操作
maven的相关操作可以打开右边的 Maven Project,在这个界面进行操作。
其中在Maven Project中里面包含了操作的工具栏,maven的生命周期,只需要双击就可以运行他的生命周期了,然后里面还包括了依赖的jar包以及引入的插件。
工具栏中常用的按钮有:
- 第1个按钮
- 这个按钮可以用来刷新maven依赖
- 第6个按钮
- 这个按钮可以用来呼出命令行,执行一些maven相关命令
- 第9个按钮
- 这个按钮可以用来显示maven的依赖树,在依赖树里面可以用来解决maven依赖的冲突。如果依赖冲突了那么连线会变成红色。
问题
自定义插件不显示
在maven里面自定义的插件不会再Maven Project窗口中显示。如果仔细看会发现我们自定义的插件被标签包裹了,而的作用是和的作用类似,都是用于在父pom中统一管理版本和配置的。所以如果我们要使用那么需要在标签外在引用一次,或者把pom中标签去掉就可以了。
例如
<build>
<finalName>mavenPorject</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!--端口控制-->
<port>8080</port>
<!--项目路径控制意味着http://localhost:8080/abc-->
<path>/</path>
<!--编码-->
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在maven中正常导入依赖后却无法import导入
这个可能是idea的缓存造成的,所以清理缓存就可以了,清理的方式是:File–>Invalidated CaChes/Restart,清理重启就可以了
服务器
服务器有很多中,这里主要说一下tomcat,其他的也是大同小异。
Tomcat
使用外部Tomcat
配置
tomcat配置在run下面的Edit Configurations中
然后点击+号添加一个本地的tomcat
添加好了之后服务器配置在Server中,而部署在Deployment中。
在配置页中After launch表示启动容器之后做的操作,而最下面的Before launch则标识启动容器之前要做的操作。
文件修改后实时生效
需要实时生效,在tomcat中添加了项目之后只需要将tomcat中Server配置下的On ‘Update’ action 和On frame deactivation修改为Update classes and resources就可以了
这种方式并不能完全实现热部署,如果想实现热部署还是推荐使用
JRebel for IntelliJ
修改项目打包后的位置
默认情况下在idea中配置的tomcat,如果部署的是扩展包,在运行时idea并不会把编译后的项目放到tomcat的webapps路径下,而是输出到打包的指定位置(Artifacts中Output directory的路径中),然后复制一份tomcat的conf、logs和work文件夹到${user.home}/.IntelliJIdea/system/tomcat/projectName下面,之后他还会在\apache-tomcat-7.0.82\conf\Catalina\localhost下生成一个xml,里面记录了访问路径和文件编译输出路径的对应关系,之后启动tomcat安装目录下的catalina.sh文件,tomcat读取\apache-tomcat-7.0.82\conf\Catalina\localhost下生成的xml,找到项目位置,然后就运行起来了。
所以如果我们让他将编译后的项目输出到tomcat的webapp下面。我们只需要修改项目设置中的Artifacts中Output directory的路径就可以了,让他指向tomcat中webapps下项目名称,那么在运行的时候他就会将编译后的项目输出到我们指定的位置
当然如果部署的是war包那么他就将解压后的war包复制到tomcat的webapp下面
将项目打成展开包
当我创建或导入web项目的时候一般情况下会给我们创建一个展开包但是也有可能不帮我们创建,如果我们要部署到tomcat中,那么就必须需要创建一个包。创建方式也很简单
其中有个地方需要注意,那就是web资源。这里的web资源默认他是通过Facets中的配置指定的,其实我们也可以手动指定web资源的位置,具体的指定方式和我们完全手动打war包指定web资源的方式一样,具体的参考下面的将项目打成web包。
而web资源在Facets中的配置位置为:
所以有的时候我们是需要修改的,不然可能会找不到web资源例如我们把web资源放到了webRoot下面的时候。就需要修改这里的路径指向webRoot
将项目打成war包
如果是maven项目,直接通过mvn package
来打包就可以了,如果是普通的web项目,那么可能就会麻烦一点。
打包web项目为war,有两种方式,分别是:
- 基于展开包,创建war包
- 自己组装war包
这里强烈建议基于展开包来创建war包。因为自己组装稍微有点麻烦。
基于扩展包创建war包
基于扩展包构建war包那么项目中得先有展开包,而展开包的创建方式上面已经介绍过了。当项目中有了展开包之后,我们直接基于展开包创建就可以了
自己构建war包
自己构建war包,我们需要做的就是自己在项目的Aritfacts中将项目的包结构组装好,然后将编译的文件输出到对应的位置
首先我们需要在Project Structure中的Artifacts中在添加一个打包的配置。
-
点击添加选择添加一个Archive
-
添加后他默认是没有WEB_INF以及web数据的输出路径的所以我们还需要给他添加需要输出的web数据。选中项目.war然后点击+号在选择Driectory Content(这个表示要输出web数据的目录),然后再选择项目存放web数据的目录也就是webRoot或webContext。当然如果web数据存放在其他目录那么就选择其他的
-
设置好web数据的输出路径之后在创建WEB-INF,以及WEB-INF下面的classes,然后再将项目编译数据添加到classes下面。添加方式选中classes然后点击+号选择Module Output,将项目添加进去
-
如果有依赖的包,那么需要在WEB-INF下面创建一个lib目录,然后选择Library Files,将依赖包添加到war包中。
-
所以配置好的结构就是
当打包的是war包的时候输出路径选哪里那么他就会将打包的war包生成在哪里,并且他还会将这个war包解压到tomcat的webapp下面,具体webapp下面的哪里,要看在tomcat里面配置的项目访问路径是哪里,如果是/那么就会输出到ROOT下面,如果是其他的例如/xxx,那么就会输出到webapp\xxx目录下面。
如果不想运行直接就把war包生成,那么可以直接选择Build–>Build Artifacts 然后选择我们创建的Artifacts 就可以了
weblogic
weblogic的使用其实和tomcat的使用差不多,只不过需要在指定weblogic所使用的域而已,还有就是在部署的时候他可以选择Deployment methed。他有两个值,分别是Weblogic.Deployer和Auto deploy,其中Weblogic.Deployer表示将项目的输出位置指定为项目的部署位置,而Auto deploy则标识将项目部署到域目录的autodeploy目录下自动部署。
还有就是使用weblogic进行部署,有的时候会报weblogic.application.ModuleException: Unmarshaller failed
,这个问题是因为weblogic的版本不支持新版的web版本,所以需要把web版本改为2.4的,直接修改web.xml就可以了
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--内容-->
</web-app>
好啦,idea中服务器的使用就这么多,其实实际中我们可能更多的是使用maven来打包,当然也可能会直接把web项目打包,所以两个都得了解一下