Maven - Eclipse下创建Maven多模块工程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37546891/article/details/79851360

maven项目构建ssh工程(父工程与子模块的拆分与聚合)

>> Eclipse下创建普通Maven项目

  • 创建maven project
    这里写图片描述
  • 创建一个简单项目
    这里写图片描述
  • 配置项目
    这里写图片描述
  • 项目创建完成,但是会报错:
    这里写图片描述
  • 查看problem报错信息:缺少web.xml文件
    这里写图片描述
  • 在webapp目录下右键new文件夹:WEB-INF
    这里写图片描述
  • 在其他项目拷贝一个web.xml放到WEB-INF文件夹下,并修改值为当前项目名称:
    这里写图片描述
  • 当前JRE版本为Maven默认的1.5,需要在pom文件里面进行配置:添加jdk编译插件
    这里写图片描述
  • 配置完pom之后保存,项目会报错:需要update项目
    这里写图片描述
  • 项目名右键 –> maven–>update project
    这里写图片描述
  • 开始创建包、类

>> Eclipse下创建多模块Maven项目

参考链接http://www.cnblogs.com/whgk/p/7121336.html

  • 创建父模块Maven ProjectFile --> New --> Other --> Maven --> Maven Project --> Next
    这里写图片描述
    这里写图片描述

  • 创建好父工程之后,从它的目录结构可以看出,父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了;src文件夹可以删除;
    这里写图片描述

  • 在父工程的pom.xml中抽取一些重复的配置的,比如:锁定jar包的版本、设置编译版本等,一般这种都不需要我们自己临时配置,网上或者公司都有已经写好了的,每次使用就直接丢过来即可;(配置代码见“配置Maven项目”)

  • 创建maven-dao子模块File --> New --> Other --> Maven --> Maven Module --> Next
    这里写图片描述
    这里写图片描述

  • 点击finish,完成之后,查看父工程中的pom.xml文件,多了一个modules节点,说明有一个子模块tkpmalltest_dao
    这里写图片描述

  • tkpmalltest_dao中的pom.xml文件,会发现多了一个 parent结点,并且内部所包含的结点,其实就是父工程的坐标
    这里写图片描述

  • 查看tkpmalltest_dao的目录结构
    这里写图片描述

  • 因为是在dao层,和数据库打交道,那么就在这个项目中,需要配置hibernate.hbm.xmlhibernate.cfg.xml,但是又集成了spring,所以hibernate.cfg.xml就不需要了,添加applicationContext.xml即可(这里需要有spring整合hibernate的基础)

  • 创建tkpmalltest_service子模块:同dao,在tkpmalltest_servicepom.xml中添加两个依赖:
    这里写图片描述

    • 添加依赖 可以手写代码,也可以直接在项目名处右键Maven --> Add Dependency
      这里写图片描述
  • 创建tkpmalltest_web子模块,创建方法同dao;同时在pom.xml文件里面添加service的依赖;
    注意:打包方式为war,而不再是jar包了,因为该层需要放到tomcat中去。与浏览器交互,就是web项目了,所以打成war包;
    这里写图片描述

  • Maven项目标准目录结构:(对项目中文件进行细分)
    这里写图片描述

  • 创建完web子模块会出现两个错误:

    • 缺失web.xml文件,需要手动添加、或者为项目增加web项目必须的一些基础文件结构:(下一小节会讲到),或者通过工具生成web.xml:项目名右键 –> JavaEE Tools –> Generate Deployment Descriptor Sub:
      这里写图片描述
      这里写图片描述

    • 项目右键Maven --> Update Project 时jdk版本为1.5,需要在pom.xml文件里添加插件,或者项目名右键 –> Maven –> add plugin
      这里写图片描述
      这里写图片描述

  • 父工程和子模块都写完之后,就成这样了:
    这里写图片描述


>> 将 Maven 项目改为 Web 工程结构

如今Maven仍然是最常用的项目管理工具,若要将Java Web项目使用Maven进行管理,则首先需要新建Maven项目,然后将其转化为web项目;使用Maven开发项目是需要项目的文件结构以某种形式存在的,本文将展示如何在eclipse中新建一个Maven Project到最终变为Mavne格式的web应用;

(1)为项目增加web项目必须的一些基础文件结构:

  • 项目名 右键 --> Properties --> Project Facets --> 勾选Dynamic Web Module 3.1 --> Apply --> OK;(可能会出现错误)
    这里写图片描述

  • dynamic web module 3.0 requires java 1.6 or newer 错误解决:把所有的设计到jdk的地方全都设为1.8;

    • (1)Window --> Properties --> java --> Compiler、Installed JREs
    • (2)项目名右键 --> Properties --> Java Build Path
    • (3)在项目的根目录找到.settings文件夹,里面
      org.eclipse.jdt.core.prefs设计到1.5的全部改为1.8;
      org.eclipse.wst.common.component将第一行的version=”1.5.0”改为version=”1.7.0”
      org.eclipse.wst.common.project.facet.core.xml:<installed facet="java" version="1.8"/>
  • 修改完之后,刷新项目,重新右键右键-属性,选择勾选dynamic web module,选择最高版本3.1:
    这里写图片描述

  • 点击下方Further configuration available
    这里写图片描述

  • 点击OK之后,回到上面dynamic web module版本选择页面,点击Apply-OK,tkpmalltest_web项目错误消失,webapp下出现两个文件夹,项目结构如下图:
    这里写图片描述

  • 项目名右键 --> Maven --> Update project

(2)修改部署项目时文件的发布路径(Tomcat)

如果需要项目其它普通web项目一样在本地tomcat下部署、运行、测试,还需进行一下设置:

  • **在XX_web项目名处右键 --> Properties --> Deployment Assembly

    • 删除test两项以及WebContent,因为test是测试时使用,并不需要部署**;
    • 添加src/main/webapp的部署路径;
    • 添加Maven Dependencies的部署路径;
      这里写图片描述
      这里写图片描述
      这里写图片描述
  • 点击Apply --> ok,完成maven web项目的转换,此时即可以把该项目部署到tomcat上


>> dependencies与dependencyManagement的区别

参考链接https://blog.csdn.net/liutengteng130/article/details/46991829

(1)DepencyManagement应用场景

当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

由于我们的模块很多,所以我们又抽象了一层,抽出一个parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。

在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

<dependencyManagement>      //父工程的pom.xml  
    <dependencies>  
        <dependency>  
            <groupId>org.eclipse.persistence</groupId>  
            <artifactId>org.eclipse.persistence.jpa</artifactId>  
            <version>${org.eclipse.persistence.jpa.version}</version>  
            <scope>provided</scope>  
        </dependency>   
     </dependencies>  
</dependencyManagement> 
<parent>              //子模块继承父工程
    <artifactId>parent</artifactId>  
    <groupId>com.tgb</groupId>    
    <version>0.0.1-SNAPSHOT</version>  
    <relativePath>../itoo-base-parent/pom.xml</relativePath>  
</parent>  
<modelVersion>4.0.0</modelVersion>  
<artifactId>base</artifactId>  
<packaging>ejb</packaging>  
<dependencies>         //依赖关系
     <dependency>      //不用声明版本号
            <groupId>org.eclipse.persistence</groupId>  
            <artifactId>org.eclipse.persistence.jpa</artifactId>  
            <scope>provided</scope>  
     </dependency>  
</dependencies>   

这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

(2)Dependencies

相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承;

(3)两者的区别

dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承);
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。


>> 配置Maven项目

(1) 配置父工程的pom.xml文件:

https://blog.csdn.net/qq_37546891/article/details/79882397

(2) 配置xxx_web子项目的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1" >   

    <display-name>tkpmalltest_web</display-name>            //tkpmalltest_web是子项目的项目名
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>    
</web-app>

(3) 配置xxx_dao子项目的pom.xml文件:

<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>
    <parent>
        <groupId>com.taikang.test</groupId>
        <artifactId>tkpmalltest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>tkpmalltest_dao</artifactId>
    <packaging>jar</packaging>  
    <name>tkpmalltest_dao</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

(4) 配置xxx_service子项目的pom.xml文件:

<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>  
    <parent>
        <groupId>com.taikang.test</groupId>
        <artifactId>tkpmalltest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>   

    <artifactId>tkpmalltest_service</artifactId>
    <packaging>jar</packaging>

    <name>tkpmalltest_service</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- 依赖dao-->
        <dependency>
            <groupId>com.taikang.test</groupId>
            <artifactId>tkpmalltest_dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

(5) 配置xxx_web子项目的pom.xml文件:

<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>
    <parent>
        <groupId>com.taikang.test</groupId>
        <artifactId>tkpmalltest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>tkpmalltest_web</artifactId>
    <packaging>war</packaging>

    <name>tkpmalltest_web</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- 依赖service-->
        <dependency>
            <groupId>com.taikang.test</groupId>
            <artifactId>tkpmalltest_service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>     

    <build>
        <finalName>tkpmalltest_web</finalName>
        <plugins>
            <plugin>    <!--配置Jetty插件-->
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(6) 更新、打包、发布

  • 使用maven-update整个工程父工程名右键 --> Maven --> Update Project

  • 打包父工程名右键 --> Run As--->Maven Install

  • 打包web子工程父工程名右键 --> Run As --> Maven Build... --> Goals: clean package --> Run

  • 启动Tomcat,浏览器访问


>> Maven整合servlet

  • src/mian/java下创建servlet:在java文件夹下
    右键 --> New --> Other --> servlet --> 写上包名com.tk.test、类名,Next --> Next(默认) --> Finish(默认)

  • 创建好之后,可能会编译报错,原因是缺少jar包,需要在pom.xml 文件里面添加依赖;
    javax.servlet / servlet-api / 2.5 / <scope>test</scope>

  • 编写Servlet文件,然后运行,因为项目名右键没有mvn tomcat:run这个命令,所以需要手动输入命令:
    项目名右键 --> maven build ... --> Goals处填写:tomcat:run(省略mvn前缀) --> Run;这样就把war包部署到了tomcat;
    注意:这里运行的tomcat跟eclipse下的server里的Tomcat启动与否没有关系,也就是说不使用eclipse启动tomcat,也可以部署war包到tomcat,然后浏览器地址栏输入web项目的地址,进行访问项目;

    • maven build ... :可以自己手动输入一些命令;
    • maven build :执行Maven的一些历史记录,可以直接选择历史记录中的命令进行操作;
  • 调试运行:debug模式

    • 使用eclipse工具:servers窗口下,在tomcat下右键 –> debug:
      这里写图片描述
    • 使用maven命令:项目名右键 –> Debug As –> Maven build … –> Goals:tomcat:run –> 关联源码(若不关联源码,会报错,断点进不来):
      这里写图片描述
      注意:启动调试前先看一下console处是否有maven tomcat在运行,若没有关闭上次运行的项目,可能或出现tomcat端口被占用的错误;
  • 启动Debug之后,可以加断点,然后在浏览器地址栏访问项目,然后单步调试:
    这里写图片描述
    这里写图片描述


>> Maven整合Struts2

  • 创建maven project,跳过原型选择,打包方式war包

  • 创建完项目报错:缺少web.xml文件:手动添加,或者配置相关设置,或者借助工具–项目名右键->JavaEE Tools生成;

  • 在pom.xml里面添加代码,设置JDK编译版本:项目名右键 --> Maven --> add Plugin --> compile(编译插件)

  • pom.xml文件里会创建添加插件的代码,继续设置configuration,设置详细信息:
    这里写图片描述

  • 项目名右键Maven,刷新项目;

  • 添加Struts2依赖:只需添加Struts2 core核心包,其他jar包依赖包自动添加进来(Maven的一大好处)
    这里写图片描述
    这里写图片描述

  • src/main/resources下面创建Struts.xml配置文件:
    这里写图片描述

  • src/main/java下面创建action类:
    这里写图片描述

  • 在web.xml中配置Struts2框架的核心过滤器:过滤器配置完之后,发送任何.action结尾,或者空白请求都会经过核心过滤器;(JSP页面不会经过这个过滤器)
    这里写图片描述

  • 编写action类中的方法;

  • Struts.xml文件中配置:
    这里写图片描述

  • 创建xx页面:

  • 启动项目,浏览器地址栏中输入:http://localhost:8080/项目名/XxxAction_方法名.action(.action不是必须写的,Struts2拦截.action请求和空白请求);若方法运行成功,并且页面转到xx页面成功,那么Struts2就整合成功;


>> 解决问题

(1)Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0

4:https://blog.csdn.net/qq_37546891/article/details/79038751

(2)The project cannot be built until build path errors are resolved

5:https://blog.csdn.net/qq_37546891/article/details/79038751

(3) Tomcat8 警告: Unable to add the resource at [***] to the cache...

6:https://blog.csdn.net/qq_37546891/article/details/79038751

猜你喜欢

转载自blog.csdn.net/qq_37546891/article/details/79851360