之前开发一直都用的Eclipse和MyEclipse,由于工作中需要改用了Intellij,一开始一肚子抱怨,不过用着用着发现大家对Intellij的褒扬并非空穴来风,Intellij IDEA的确有过人之处,尤其是与Maven的结合,以及结合Jetty的快速部署和测试给开发带来了极大的便利。
下面介绍下在Intellij下创建基于Maven的JAVA工程以及部署:
首先,创建一个Maven的空白工程
两个ID可以随便输
输入工程名就可以了
创建完毕以后的目录结构是这样的:
我这里有web功能是因为我自己加的,一开始的空白maven工程是不会有web文件夹的,具体方法就是在工程上右键选择“Add Framework Support”,选择需要添加的框架即可,可以是web,也可以是JAVAEE或者spring,不过这些包一般都在pom中配置即可,这样做的好处是,以后工程共享和做版本控制的时候,只需要共享一份源代码和一份pom.xml就可以了,不需要重复配置jar包。
下面详细解释一下pom文件,在maven项目中,运行和部署都要靠它
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.seiya</groupId>
<artifactId>jobstatistics</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--<name>${project.artifactId}</name>-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>com.springsource.org.codehaus.jackson.mapper</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>com.springsource.org.codehaus.jackson</artifactId>
<version>1.0.0</version>
</dependency>
<!-- J2ee web spec -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<!--<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.0.0</version>
</dependency>-->
</dependencies>
<!--<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>releases</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>-->
<build>
<defaultGoal>install</defaultGoal>
<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>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<contextPath>/jobstatistics</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8010</port>
<maxIdleTime>3600000</maxIdleTime>
</connector>
</connectors>
<scanIntervalSeconds>0</scanIntervalSeconds>
<webAppSourceDirectory>web</webAppSourceDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26-nolock</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<configuration>
<outputDirectory>${basedir}/lib</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warName>${project.artifactId}</warName>
<webResources>
<resource>
<directory>web</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
<groupId>com.seiya</groupId> <artifactId>jobstatistics</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging>这几句话表示的项目的基本信息,如果要打包成war包的话,<packaging>必不可少
<dependencies>里面是所有依赖项,就是第三方jar包
<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> <encoding>UTF-8</encoding> </configuration> </plugin>这是配置maven的编译信息以及字符编码信息
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <contextPath>/jobstatistics</contextPath> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8010</port> <maxIdleTime>3600000</maxIdleTime> </connector> </connectors> <scanIntervalSeconds>0</scanIntervalSeconds> <webAppSourceDirectory>web</webAppSourceDirectory> </configuration> <dependencies> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty</artifactId> <version>6.1.26-nolock</version> </dependency> </dependencies> </plugin>这是配置jetty的信息,这段话配置好之后,会在右边栏中出现jetty选项
contextPath
指的是上下文,也就是你工程的名字
<webAppSourceDirectory>web</webAppSourceDirectory>这个值要和你的web文件夹对于起来,如果你的项目中叫webapp,那么就是webapp,如果是web,那么就是web,总之就是要让maven能够找到你的web文件夹
<plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <configuration> <outputDirectory>${basedir}/lib</outputDirectory> </configuration> </plugin>这段话是配置依赖性的,也就是生成lib文件夹,否则在target中不会有lib文件夹,其中也不会有jar包
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warName>${project.artifactId}</warName> <webResources> <resource> <directory>web</directory> </resource> </webResources> </configuration> </plugin>
这段话是为了生成war包而配置的,我们的工程在jetty中直接就可以运行,配置war主要是为了可以将war直接丢进我们想要的web容器中,比如tomcat,即可以直接运行。