Maven多模块搭建Web项目

原创 2015年11月20日 03:09:11

前言

最近用maven将Web项目分成多个模块,各种异常,磕磕碰碰也终于弄好了。

正文

我工程的整个目录结构如下,这maven项目很有意思,我移动其他地方,只要将fastcoding-parent移过去就行了,这个fastcoding-parent下面包括了各个模块的pom和src下的java文件,到时候改动一下jdk,tomcat就可以了
这里写图片描述

如果建立上面的目录?
我们先建立一个fastcoding_parent项目。File-New-Other,搜索Maven,出现如下图的三个选项,选着Maven Project
这里写图片描述
这里需要这个fastcoding-parent模块是pom,我们就选择create a simple project
这里写图片描述
建立好parent以后,选中这个parent项目,右键new-other,搜索maven,选着Maven Module,这次我们不勾选Create a simple project
而是直接next,在出现的页面有很多的选项
这里写图片描述
一般用红框第一个,如果是fastcoding-website,我用maven-archetype-webapp,其实不用这个也行,只是最后将maven转成web有点麻烦。都可以试试

这样建立了第一个Maven Module,其他三个模块同理
建立以后,发现工程在fastcoding-parent外面出现了每个模块的工程,在fastcoding-parent里面也有这些模块的层次结构,我修改外面工程,在fastcoding-parent里面对应的模块也会自动同步。
具体看上面第一张图。我们写代码是在外面对应的模块写的。

我们写好各个模块的依赖关系,同时注意项目的在workspace的编译,这样可以避免很多问题。
这些觉得看看其他教程就能完成了。依赖关系形成了,在Maven Depencies中,我们都可以看到,看不到,就编译项目。
注意整个在项目在tomcat跑起来,请看下面的内容

遇到的困难与总结

1、在搭建这个maven项目的时候,eclipse进度条各种卡死。又经常在spring配置文件显示错误,进度条一直停留,如下图
这里写图片描述
这个问题,我也不知道怎么解决的,我所做的挣扎就是,重新编译工程,剪切,赋值,保存,反正莫名其妙就好了,后面又莫名其妙出现了。是不是我用网通的原因?(当然网上有很多解决办法,但对当时出现的问题没什么帮助),上面所说的进度条卡死,如build卡死等,我只能取消,实在不行就关闭eclipse,如果还是解决不了,我在建一个workspace,因为各种问题换了2次的workspace

2、搭建maven多模块项目,还有最多的是编译的原因,在我的工程下面,没有成功编译,而我又没有发现,所以导致一直不能成功,其中一个publish项目到tomcat出现的问题如下

Publishing failed
File not found: E:\workbench_2015_8\parent_blog\blog_service\target\classes\META-INF\maven\org.study.blog\blog_service\pom.properties.
E:\workbench_2015_8\parent_blog\blog_service\target\classes\META-INF\maven\org.study.blog\blog_service\pom.properties (系统找不到指定的路径。)
File not : E:\workbench_2015_8\parent_blog\blog_persistent\target\classes\META-INF\maven\org.study.blog\blog_persistent\pom.properties.
E:\workbench_2015_8\parent_blog\blog_persistent\target\classes\META-INF\maven\org.study.blog\blog_persistent\pom.properties (系统找不到指定的路径。)
File not found: E:\workbench_2015_8\parent_blog\blog_Exception\target\classes\META-INF\maven\org.study.blog\blog_Exception\pom.properties.
E:\workbench_2015_8\parent_blog\blog_Exception\target\classes\META-INF\maven\org.study.blog\blog_Exception\pom.properties (系统找不到指定的路径。)

没有META-INF。我发现MAVEN创建的工程webapp下面没有META-INF这个文件夹,而传统WEB工程,或者简单的将maven项目转成Web项目,将WebContent的META-INF与WEB-INF拷贝过去,所以一直以为是webapp下面没有META-INF的原因,后来才发现是编译的问题
对于这个编译问题我用以下的方法
这里我将Build Automatically取消掉,然后点击clean
这里写图片描述
进入clean,有如下内容
这里写图片描述

3、我A模块依赖B模块,发现在Maven Dependencies下面没有如下红框的文件夹
这里写图片描述
其实这个也是编译的问题,重新编译一下工程就会出现,在Project下面勾选Build Automatically,然后点保存,一般都会自动Maven Dependencies增删一些依赖jar,有时候不管用,就取消Build Automatically,点clean。

4、我这里用一个fastcoding-website的模块增加tomcat,src下面没有任何的东西,这个模块依赖其他模块(直接依赖模块fastcoding-controller,这样就会间接依赖controller模块下的其他jar,和controller所依赖的其他模块),我之前的疑惑是fastcoding下面的配置文件spring-persistent.xml在fastcoding-persistent模块下面,里面有如下的内容

<context:component-scan base-package="org" use-default-filters="false">
        <context:include-filter type="regex" expression="org.service.*"/>
        <context:include-filter type="regex" expression="org.persistent.impl.*"/>
        <context:include-filter type="regex" expression="org.action.controller*"/>
</context:component-scan>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="interceptorPointCuts" expression="execution(* org.service.impl.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
</aop:config>

这里这些包路径的配置,对fastcoding-service和fastcoding-controller有用吗? 只要将配置文件放到src/main/resources,src/test/resources下面,这些模块并形成依赖,就能读到配置的包

值得注意的是fastcoding-website这个模块下面的web.xml,配置一些路径问题

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:config/spring-persistent.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener> 

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <description>加载/WEB-INF/spring-mvc/目录下的所有XML作为Spring MVC的配置文件</description>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:config/*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

这里要获取所依赖的模块里面的配置文件,需要在classpath后面加一个星号
如果不加,是获取不到配置文件的

5、fastcoding-website,直接,或者间接依赖其他模块,在Maven Dependencies下面会显示如下的的包
这里写图片描述
但是这样做还是不够的,我需要右键项目属性配置一下,将这些模块的jar放到tomcat的WEB-INF - lib中
这里写图片描述

部署项目的时候,在tomcat的webapp项目的WEB-INF-lib中可以找到如下jar
这里写图片描述

很有意思,tomcat的WEB-INF / classes下面没有任何的class文件,之前一直认为依赖的模块的class都放到这里面,一看没有,以为又哪里错了。其实不需要,tomcat所在的fastcoding-website模块的src下面本来就没有任何java源文件,只要lib有其他模块的jar就行了

未完待续

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于maven使用IDEA创建多模块项目

一 项目工程目录 二 创建父工程 三 创建公共工具类 三 创建开发项目 四 创建开发项目子模块 五 运行项目 鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDEA基于Maven创...

maven构建项目(多模块项目)

在eclipse下构建maven项目,该项目由多个子模块组成。 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入new maven...
  • subuser
  • subuser
  • 2014年02月08日 17:31
  • 64983

eclipse上搭建maven多模块Java Web项目

1、模块化需求及项目模块说明手头上有个已上线的系统,但因老板的特殊要求,系统需要不断的修改。还有就是公司市场部不定期地在举行一些微信活动,每一个活动都是周期性的,活动完了这个功能就要在系统中移除。系统...
  • p_3er
  • p_3er
  • 2016年01月20日 17:08
  • 16284

maven多模块项目,多web合并项目使用心得

此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过。        最近一直在搞fixflow5.2的升级工作,以前只知道maven好用,但是一直没机会接触,这次由...

使用maven搭建多模块项目

我们为什么要进行模块化开发?在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。我们假设有这样一个商城项目,包括以下几个模块:...

Eclipse下使用maven搭建多模块项目

暂时将项目分为如下几层: domain(域模型层)、dao(数据库访问层)、service(业务逻辑层)、web(表现层),有需要再另行添加(如common等); 目录结构: 一、app 该层为...

maven多模块web项目完整实例详解(附项目源码)

使用maven构建多模块项目。在一个项目中使用多个模块的一个方法是将模块添加为依赖项,正常情况下,我们会添加一个外部模块作为依赖。但是,当模块是一个项目的一部分,并密切相关的时候,该项目应被构造为一个...

maven构建多模块的web项目

利用maven构建多模块的项目,使项目的可读性更强

Maven工程聚合,多个Java工程、web工程聚合

最近写个自己的小项目,牵扯到maven工程聚合问题,网上看了大量资料研究了下,成功了,按照自己的理解简单粗暴的记录下。。。一、模块结构粗略画了个草图表示下现有模块之间的关系二、模块作用及配置文件 to...

使用maven整合多个web项目,多个war合并

以下文章转载自:http://www.blogjava.net/iduido/archive/2013/01/21/394520.html  在项目管理的过程中,初期可能一个项目并不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven多模块搭建Web项目
举报原因:
原因补充:

(最多只允许输入30个字)