使用Maven把eclipse(indigo版)打造成MyEclipse

之前做J2EE网站一直是使用MyEclipse的,倒不是图它的HTML或CSS或JS代码提示或者“所见即所得”形式的网页编辑,而是喜欢她方便的网站部署和服务器操作。然而,每次安装完成MyEclipse都需要破解,着实让自己高兴的心情蒙上了一层阴影——老是感觉自己在做坏事,心中惴惴不安的……终于鼓足勇气到Eclipse官网找了个J2EE版的Eclipse Indigo,尽管可以通过Eclipse自身的配置使它看起来像MyEclipse,可毕竟灵活性上还是不足,开发的时候很多操作还得手动完成。

有没有办法让Eclipse在开发J2EE项目时的自动化程度更高呢?当然是有的啦!那就是借助Maven!


本文使用Maven的resources,antrun,clean,war等插件实现了:

1、编译Servlet

2、生成WAR文件

3、生成网站目录结构

4、部署网站

5、反部署网站

6、重新部署网站


7、启动服务器

8、关闭服务器

9、1键生成网站-部署网站-启动服务器

……

更主要的是,使用Maven后,可以方便地借助Hudson完成持续集成!


实现上述功能最关键的东西就是POM文件,下面是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>cn.edu.sdu.ise.leesonlog.lms4g</groupId>
  <artifactId>lms4g-website</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>lms4g-website Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
  	<server_name>tomcat7x</server_name>
  	<server_home>D:\apache-tomcat-7.0.25</server_home>
  	<server_disk>D:</server_disk>
  	<project_webapps_directory>${server_home}/webapps/${project.build.finalName}</project_webapps_directory>
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>servlet-api</artifactId>
      <version>5.5.23</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
    
  <build>
  
  	<!-- 设定插件版本 -->
  	<pluginManagement>
	  	<plugins>
	  		<plugin>
	  			<artifactId>maven-antrun-plugin</artifactId>  
	  			<version>1.7</version>
	  		</plugin>
	  		<plugin>  
			    <artifactId>maven-clean-plugin</artifactId>
			    <version>2.4.1</version>
		    </plugin>
		    <plugin>  
		    	<artifactId>maven-resources-plugin</artifactId>  
 				<version>2.5</version>
 			</plugin>
	  	</plugins>
  	</pluginManagement>
  
    <finalName>lms4g</finalName>
    
    <resources>
    	<!-- 对resources目录进行过滤,主要是设置bat目录里的内容 -->
		<resource>
			<directory>${project.basedir}/src/main/resources</directory>
			<filtering>true</filtering>
		</resource>
	</resources>
    <plugins>		
		<plugin>
			<artifactId>maven-surefire-plugin</artifactId>
			<configuration>
	    		<skipTests>true</skipTests>
	    	</configuration>
		</plugin>
    </plugins>
  </build>
  
  <profiles>
  
  	<!-- 启动Tomcat服务器 -->
  	<profile>
  		<id>startup-server</id>
		
  		<build>
  			<plugins>
				<plugin>  
				    <artifactId>maven-antrun-plugin</artifactId>  
			        <configuration>  
			          <tasks>  
			               <exec  
			                 executable="${project.build.outputDirectory}/bat/mystartup.bat"  
			                 >  
			               </exec>  
			          </tasks>  
			        </configuration>  
				</plugin>
  			</plugins>
  		</build>
  	</profile>
  	
  	<!-- 关闭Tomcat服务器 -->
  	<profile>
  		<id>shutdown-server</id>
		
  		<build>
  			<plugins>
				<plugin>  
				    <artifactId>maven-antrun-plugin</artifactId>  
			        <configuration>  
			          <tasks>  
			               <exec  
			                 executable="${project.build.outputDirectory}/bat/myshutdown.bat"  
			                 >  
			               </exec>  
			          </tasks>  
			        </configuration>  
				</plugin>
  			</plugins>
  		</build>
  	</profile>
  
  	<!-- 把网站从服务器上清除或部署到服务器上 -->
  	<profile>
  		<id>modify-webapps</id>
  		
  		<build>
  			<plugins>
  				<!-- 使用clean插件清除webapps中的网站目录 和war文件-->
	  			<plugin>  
				    <artifactId>maven-clean-plugin</artifactId>
				    <configuration>  
				        <verbose>false</verbose>  
				        <filesets> 
				            <fileset>
				                <directory>${server_home}/webapps</directory>
				                <includes>
				                	<include>${project.build.finalName}.war</include>
				                </includes>
				            </fileset> 
				            <fileset>
				                <directory>${project_webapps_directory}</directory>
				            </fileset>
				      	</filesets>
				      	<!-- 不删除本项目的缺省输出目录 -->
				      	<excludeDefaultDirectories>true</excludeDefaultDirectories>
				    </configuration>  
				</plugin>
				
				
		    	<!-- 
		    		用resources插件复制网站文件到服务器的webapps中 
		    		需要单独使用mvn命令运行,而不应该绑定到默认阶段(phase)
		    	-->
		    	<plugin>  
				    <artifactId>maven-resources-plugin</artifactId>  
		            <configuration>  
		                <outputDirectory>${project_webapps_directory}</outputDirectory>  
		                <resources>  
		                    <resource>
		                        <directory>${project.build.directory}/${project.build.finalName}</directory>
		                    </resource>
		                </resources>  
		                <includeEmptyDirs>true</includeEmptyDirs>
		                <encoding>UTF-8</encoding>
		            </configuration>
				</plugin>  
  			</plugins>
  		</build>
  	</profile>
  </profiles>
  
</project>

工程的目录结构如下图:

使用Maven把eclipse(indigo版)打造成MyEclipse_第1张图片


启动服务器和关闭服务器用到的两个bat文件的代码如下:

mystartup.bat文件:

${server_disk}
cd ${server_home}/bin
startup.bat

myshutdown.bat文件:

${server_disk}
cd ${server_home}/bin
shutdown.bat


下面将一开始列出来的功能一一讲解是如何实现的。

1、编译Servlet

这是最简单的,直接使用maven-compile-plugin插件,即在命令行或M2E插件中运行命令:

mvn compile


2、生成WAR文件

生成WAR文件需要将本项目的<packaging>属性设置为war,然后使用maven-war-plugin插件,即在命令行或M2E插件中运行命令:

mvn package


3、生成网站目录结构

生成WAR文件的时候,你可能会注意到,Maven实际上已经在target目录下生成了${finalName}文件夹,这个文件夹就是可以部署在服务器上的网站目录。

但是,package阶段(phase)除了生成了网站目录外,还生成了WAR文件,这在调试阶段可能是多余的,即我们不需要生成WAR文件,因为生成的时候要耗费时间,部署的时候还是要浪费时间(因为服务器要解压WAR文件),何苦呢!

所以我们就需要Maven只生成项目的网站目录,部署的时候,直接把网站目录copy到服务器的wabapps目录下就行了,节省了打包成WAR文件和解压WAR文件的时间!

实际上,对于<packaging>属性是war的Maven项目,package阶段(phase)使用的是maven-war-plugin的war目标(goal),从maven-war-plugin插件的帮助页面上可以知道,该插件实际上还有一个exploded目标(goal),该目标(goal)只生成网站目录,而不打包成WAR文件,正是我们想要的!大笑


(未完,待续……)












你可能感兴趣的:(使用Maven把eclipse(indigo版)打造成MyEclipse)