更改maven打包文件的默认输出

来源:互联网 发布:云计算视频教程 编辑:程序博客网 时间:2024/06/05 08:12

        众所周知,maven是个项目管理工具,maven是个好东西啊,这里就不多介绍了,网上有很多!这里我主要是讲一下在使用maven之后的一些心得。

         开发j2ee Web项目的同学,在开发阶段总免不了需要运行web服务器来调试项目。一般都喜欢在应用服务器的配置文件中设置虚拟目录,直接知道web项目所在的目录;这样可以省去打包、再发布到服务器的步骤!

        大家知道,在进行j2ee项目开发中,调试的时候如果只是修改了页面是不需要重启应用服务器的。

 

 一、没有用maven管理时

在Eclipse中开发j2ee项目,所有的jsp文件都是放在WebRoot目录下面,用户需要把所有用到的jar包放到WEB-INF(WebRoot的子目录)目录下的lib目录下(这就是没有用maven管理的缺点,所有jar都要自己去找);Eclipse编译时,会把java源代码产生的class文件放到WEB-INF目录的classes目录下。所以大家在应用服务器中指定虚拟目录时,直接指定到这个WebRoot目录就行了,这样在调试过程中,如果只修改了jsp文件,则不需要重启服务器,刷新页面,就可以看到修改后的效果。

 

二、在用maven管理j2ee项目时

        当然首先需要安装maven。这时就创建j2ee项目,就不是直接用Eclipse创建了,所以也就不会产生WebRoot目录了。当然,你也可以直接用Eclipse创建,然后手动去创建适应于maven的目录的结果和文件(这样的话难免觉得别扭,既然maven提供了相应的命令,我们为什么不直接使用呢)!

以下是我做的一个例子(假设此例子中的项目所在的目录是D:/EclipseWorkspace):

首先运行命令创建一个j2ee web项目:mvn archetype:create -DgroupId=my.maven.test -DartifactId=testMaven  -DarchetypeArtifactId=maven-archetype-webapp

项目创建完后,运行命令:mvn eclipse:eclipse 【生成eclipse的项目文件,可以导入到eclipse中】

然后此项目就成了一个eclipse项目,可以使用eclipse进行开发了。

导入到eclipse中后,本人创建了几个java类和一个叫abc的jsp页面,如图一:

图一

其中target目录是用来存放项目打包之后生成的文件的目录,图一中显示target目录下并没有文件,是因为我还没有用maven对项目进行打包。

 

运行打包命令:mvn clean package 【对项目进行打包】

运行此命令后,项目的结构如图二:

图二

发现图二中target目录下多出了几个子目录和文件,这是因为运行命令mvn clean package后,生成的文件默认会放在target目录下。

其中testMaven.war文件可以直接拷贝到应用服务器的发布目下,启动服务器可以直接运行!但在开发阶段,相信不会有人这么调试web项目!

生成的子目录testMaven也是一个完整的web应用,展开后如图三:

图三

所以对于maven管理的项目,指定web项目的虚拟目录,在此例子中虚拟目录应该是“D:/EclipseWorkspace/testMaven/target/testMaven”。但这样的话,有一个缺点,那就是每次只要修改了项目中的文件,即使是jsp文件或者静态页面,你都要运行mvn clean package命令重新打包;要不然你的修改就不会更新到target目录下的文件中去!这样的话感觉比较麻烦,万一忘了执行此命令就刷新页面,发现没有看到修改后效果,找问题都不好找!因为maven遵循“约定优先于配置”的思想。所以一般所有的页面都是放在目录webapp下面的,就我这例子而言也是如此!图二和图三都是执行了mvn clean package命令之后的项目的目录结构,从中可以发现在webapp的子目录WEB-INF下面除了页面的源文件,并没有classes目录和lib目录!要是有的话,那直接把虚拟目录制定到此webapp目下即“D:/EclipseWorkspace/testMaven/src/main/webapp”那该多好,就不用每次修改了页面都需要运行命令mvn clean package之后才能看到效果!

对于这个问题是可以解决的,由于maven遵循“约定优先于配置”的思想,所以如果不做特殊配置,它默认是把打包之后产生的文件都放在target目录下的。要想改变此默认行为,我们修改在项目中的pom.xml文件。在此项目中,添加如下配置:

  <build>
    <plugins>    

         <!-- 更改maven默认的打包目录 -->
        <plugin>
           <artifactId>maven-war-plugin</artifactId>
           <configuration>
               <webappDirectory>${basedir}/src/main/webapp</webappDirectory>
               <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
           </configuration>
       </plugin>      
    </plugins>
  </build>

修改之后运行打包命令mvn clean package,项目的目录结构图如图四:

图四

从图四可以看到,webapp的子目录WEB-INF下面多出了classes和lib目录。这样的话,如果你只修改了页面,就不需要再执行mvn clean package命令对项目进行打包了(因为页面的源文件都在webapp目下的),直接享受修改页面即可刷新页面的快捷了(但是如果修改的是java文件,则还是需要执行mvn clean package命令重新打包的;同理每次修改了pom.xml文件也是一样,这点还是要注意)!

原创粉丝点击