maven合并webapp_idea maven项目名后边有 maven webapp - CSDN
  • maven 多模块多Web应用合并War包是根据我上一章的分模块分工程管理的内容基础之上来写的,如果要看这部分内容需要结合上一章“maven 分模块分工程管理”来着手。 我这个工程分为一个顶级父工程和五个子级模块工程,...

    maven 多模块多Web应用合并War包是根据我上一章的分模块分工程管理的内容基础之上来写的,如果要看这部分内容需要结合上一章“maven 分模块分工程管理”来着手。

    我这个工程分为一个顶级父工程和五个子级模块工程,项目都已经成功的建立了。

    我这会要将客户管理customermgr项目以及goodsmgrweb项目合并到architectureweb中并且在相应的项目中新建jsp,文件以及对应的js文件,并且会分别单独运行customermgr、goodsmgrweb、architectureweb模块,看看maven的分模块分工程管理的方便之处。

    1.architectureweb要配置好customermgr、goodsmgrweb的相关依赖。

    代码:

     

    <dependencies>
    		<dependency>
    			<groupId>com.hxqc</groupId>
    			<artifactId>customermgr</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    			<type>war</type>
    		</dependency>
    		<dependency>
    			<groupId>com.hxqc</groupId>
    			<artifactId>goodsmgrweb</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    			<type>war</type>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<build>
    		<finalName>architectureweb</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-war-plugin</artifactId>
    				<version>3.0.0</version>
    				<configuration>
    					<overlays>
    						<overlay>
    							<groupId>com.hxqc</groupId>
    							<artifactId>customermgr</artifactId>
    						</overlay>
    						<overlay>
    							<groupId>com.hxqc</groupId>
    							<artifactId>goodsmgrweb</artifactId>
    						</overlay>
    					</overlays>
    				</configuration>
    			</plugin>

     

     

     

     

     

    2.在common公共资源模块新建java class Base1然后在customermgr中调用Base1的方法看看合并效果。

    3.在customermgr中新建customer1类然后写入一个方法,在customermgr新建其他的jsp文件、文件夹、js并且写入相关的方法输出。文件太多反锁就不一 一展示就是每个js或者jsp文件写个能输出的方法主要看效果用。

    在jsp文件中调用common中的base1类中的方法时要早customermgr中注入common依赖关系,不然引用import base1类时会报错。

    4.商品后台管理goodsmgr项目中新建goods1类在goodsmgrweb中调用看合并依赖效果。

    5.商品管理goodsmgrweb页面管理,在这里面类似于customermgr新建js、jsp文件在文件中输入一些输出做观察用项目结构如图。

    由于在goodsmgrweb 的jsp页面中调用了goodsmgr 里面的goods类以及里面的方法,所以也要在goodsmgrweb注入goodsmgr不然jsp文件会报错。

    6.总项目architecture右键--->run as--->maven install architecturex项目结构如下。

    根据目录会发现子模块有重复部分的a.jsp文件合并的时候只取了一个,这里我们是按照配置依赖的时候的顺序来取的。

    所以在分模块管理项目中要区别的对待新建的各种文件,避免重复的同路径同文件名。

    7.运行项目举例goodsmgrweb项目的运行,architectureweb、customermgr运行类似不一 一举例。

    首先,配置goodsmgrweb pom.xml 文件加入jetty插件配置。

     

    <plugins>
    	<plugin>
    		<groupId>org.mortbay.jetty</groupId>
    		<artifactId>jetty-maven-plugin</artifactId>
    		<version>8.1.16.v20140903</version>
    		<configuration>
    			<scanIntervalSeconds>10</scanIntervalSeconds>
    			<stopPort>9999</stopPort>
    			<webApp>
    				<contextPath>/goods</contextPath>
    			</webApp>
    		<connectors>
    			<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
    			        <port>9080</port>
    			        <maxIdleTime>60000</maxIdleTime>
    			</connector>
    			<!-- <connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"> 
    			<port>9443</port> <password>changeit</password> </connector> -->
    			</connectors>
    		</configuration>
    	</plugin>
    </plugins>

     

     

     

    右键goodsmgrweb ---> run as --->run configurations (jetty:run)

    运行成功就会出现:

     

    [INFO] Classes = D:\Workspaces\architecture\goodsmgrweb\target\classes
    [INFO] Context path = /goods
    [INFO] Tmp directory = D:\Workspaces\architecture\goodsmgrweb\target\tmp
    [INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
    [INFO] Web overrides =  none
    [INFO] web.xml file = file:/D:/Workspaces/architecture/goodsmgrweb/src/main/webapp/WEB-INF/web.xml
    [INFO] Webapp directory = D:\Workspaces\architecture\goodsmgrweb\src\main\webapp
    [INFO] jetty-8.1.16.v20140903
    [INFO] No Transaction manager found - if your webapp requires one, please configure one.
    [WARNING] !RequestLog
    [INFO] Started SelectChannelConnector@0.0.0.0:9080
    [INFO] Started Jetty Server
    [INFO] Starting scanner at interval of 10 seconds.


    然后访问效果如下:

     

     

     

     

     

    展开全文
  • 因为如果都集中在一个maven webapp中,那么这个webapp就会过大,而且在业务上显得比较松散  但是这些持有js、css、jsp的maven工程,如果packaging设置为jar是不合适的,因为外围要读取内部的这些文件就会很困难

    1.使用原因

            在一个大项目中拆分maven工程时,很有可能会把js、css、jsp等文件放在不同的工程里(根据业务划分的模块)。因为如果都集中在一个maven webapp中,那么这个webapp就会过大,而且在业务上显得比较松散

           但是这些持有js、css、jsp的maven工程,如果packaging设置为jar是不合适的,因为外围要读取内部的这些文件就会很困难。在这种场景下,一个很自然的想法就是打成war包,然后用某种方式将多个war包归并起来,得到最终的war包

           这就是overlay使用的地方


    2.实例

            创建2个web工程,一个是task-sla-web,一个是task-web-dist,packaging类型都是war,目录结构如下:

                                   

                                       

                 其中task-sla-web的pom文件如下

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.huawei.inoc.wfm.task</groupId>
    <artifactId>task-sla-web</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>task-sla-web</name>
    
                     该工程就是打成一个war包,但是这个war是无法运行的,是专门用来合并的(其中放置了一个空的web.xml,因为maven-war-plugin的package goal有轻质要求)

                    下面是task-web-dist的pom文件:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.huawei.inoc.wfm.task</groupId>
    <artifactId>task-web-dist</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>task-web-dist</name>
    
                  build中如下配置:

    <!-- 合并多个war -->
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-war-plugin</artifactId>
       <version>2.1.1</version>
       <configuration>
          <overlays>
             <overlay>
                <groupId>com.huawei.inoc.wfm.task</groupId>
                <artifactId>task-sla-web</artifactId>
             </overlay>
          </overlays>
       </configuration>
    </plugin>
    
             同时需要添加依赖:

    <!-- 配置依赖 -->
    <dependencies>
       <dependency>
          <groupId>com.huawei.inoc.wfm.task</groupId>
          <artifactId>task-sla-web</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <type>war</type>
       </dependency>
    </dependencies>
    

           注意:

          (1)task-web-dist自身的packaging也是war

          (2)在<overlay>中配置要归并的webapp的groupId和artifactId,注意的是该pom所在的webapp工程时主工程,会覆盖掉所有待归并工程的同名文件,包括web.xml

          (3)要归并的webapp,必须声明为依赖


    归并后最终的war包如下:




    展开全文
  • 在WAR插件的以往版本中,配置并不总是必须的。如果你觉得使用默认设置能很好满足要求,那就继续这么做。但是如果你需要更多的控制,那么你就歹好好看看下面的部分了。 元素包含有下列子元素: ...

    在WAR插件的以往版本中,配置并不总是必须的。如果你觉得使用默认设置能很好满足要求,那就继续这么做。但是如果你需要更多的控制,那么你就歹好好看看下面的部分了。

    <overlay>元素包含有下列子元素:

    • id -  overlay id。如果你不提供的话,WAR插件将自动生成一个。
    • groupId -  配置你想要覆盖的groupId。
    • artifactId – 配置你想要覆盖的构件的artifactId。 
    • type – 配置你想要覆盖的构件类型。默认值是:war。
    • classifier – 如果有多个构件匹配当前的groupId/artifactId,那么你需要配置构件的classifier以明确覆盖(classifier:该元素用来帮助定义构建输出的一些附属构件)。
    • includes -  要包含的文件。默认情况下,所有文件都能被包含。  
    • excludes – 要排除的文件。默认情况下,在META – INF目录是被排除在外的。
    • targetPath -  在webapp结构的目标相对路径,当然这只在覆盖类型为war时才有效。默认情况下,覆盖的内容都追加在webapp的根节点下。
    • skip – 当设置为true时,跳过本次覆盖。默认值是:false。

    说了这么多,还是举实例会比较直观一点。

    比如,我要排除我们的documentedprojectdependency.war下的sampleimage-dependency.jpg来覆盖目标war文件:

      …
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <overlays>
                <overlay>
                  <groupId>com.example.projects</groupId>
                  <artifactId>documentedprojectdependency</artifactId>
                  <excludes>
                    <exclude>WEB-INF/classes/images/sampleimage-dependency.jpg</exclude>
                  </excludes>
                </overlay>
              </overlays>
            </configuration>
          </plugin>
        </plugins>
      </build>
      …

    4、Overlays的打包

    Overlays采用第一直达者优先的策略(因此,如果一个文件被某一个副本覆盖过,则它不会被另一个副本继续覆盖)。

    Overlays的应用步骤依照它们在<overlays>配置的顺序。如果没有指定配置,那么它们的依赖关系将按照POM定义的顺序来调用(警告:这有很多的不确定性,特别是在您使用传递性依赖来覆盖的时候)。如果当前项目运用了复合覆盖的情况(即同时包含配置型覆盖和非配置型覆盖),非配置型覆盖应用于配置型覆盖之后。

    默认情况下,该项目源(亦称当前构建)遵循按pom.xml上下文中依赖的先后顺序进行追加(如任何覆盖元素已被应用之前)。当前构建定义了一个没有groupId和artifactId的特殊覆盖方式。如果overlays需要应用第一(直达者优先)原则,那么就只需简单地配置当前构建在这些覆盖之后。

    例如,假设groupid为com.example.projects的my-webapp是当前项目的一个依赖,而你需要首先应用它,操作如下:

      …
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <overlays>
                <overlay>
                  <groupId>com.example.projects</groupId>
                  <artifactId>my-webapp</artifactId>
                </overlay>
                <overlay>
                  <!– 空 groupId/artifactId代表当前构建 –>
                </overlay>
              </overlays>
            </configuration>
          </plugin>
        </plugins>
      </build>
      …

    注意:在上述情况下,没有配置在<overlays>元素的其它WAR依赖都会应用在当前构建之后。

    如果你想要执行一项更好更精细的覆盖策略,overlays能通过不同的includes/exclude元素进行多重打包。例如,我想要在当前项目中使用my-webapp的 index.jsp覆盖文件,但是my-webapp的其它文件还是按照常规方式来控制,鉴于此,我们必须要为 my-webapp定义两个覆盖配置:

      …
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <overlays>
                <overlay>
                  <id>my-webapp-index.jsp</id>
                  <groupId>com.example.projects</groupId>
                  <artifactId>my-webapp</artifactId>
                  <includes>
                    <include>index.jsp</include>
                  </includes>
                </overlay>
                <overlay>
                  <!– 空 groupId/artifactId代表当前构建 –>
                </overlay>

    <!– 如果有必要的话,就把其它overlays配置在这里 –>

    <overlay>
                  <id>my-webapp</id>
                  <groupId>com.example.projects</groupId>
                  <artifactId>my-webapp</artifactId>
                </overlay>
              </overlays>
            </configuration>
          </plugin>
        </plugins>
      </build>
      …

     5、Overlay全局设置

    下面的设置能指定全局性的Overlay和修改所有Overlay的应用方式。

    • dependentWarIncludes -  设置此包含默认值适用于所有的overlay。没有指定includes元素的overlay都将继承此默认设置。

        …
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <dependentWarIncludes>**/IncludeME,**/images</dependentWarIncludes>
            </configuration>
           </plugin>
        </plugins>
        …

    • dependentWarExcludes -  设置此排除默认值适用于所有的overlay。没有指定excludes元素的overlay都将继承此默认设置。

        …
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <dependentWarExcludes>WEB-INF/web.xml,index.*</dependentWarExcludes>
            </configuration>
           </plugin>
        </plugins>
        …

    • workDirectory – 设置overlays临时提取的目录。

        …
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <!– default value is target/war/work –>
              <workDirectory>/tmp/extract_here</workDirectory>
            </configuration>
           </plugin>
        </plugins>
        …

    • useCache – 设置true时,能启用webapp架构缓存。默认值:false。

        …
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <useCache>true</useCache>
            </configuration>
           </plugin>
        </plugins>
        …

    6、ZIP依赖的覆盖

    要想使一个zip依赖作为一个覆盖,你必须在插件配置中指定它。例如你要在Web应用的scripts目录下通过一个zip覆盖注入内容,操作如下:

        …
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <overlays>
                <overlay>
                  <groupId>zipGroupId</groupId>
                  <artifactId>zipArtifactId</artifactId>
                  <type>zip</type>
                  <targetPath>scripts</targetPath>
                </overlay>
              </overlays>
            </configuration>
          </plugin>
        </plugins>
        …

    三、参考资料

    1、http://maven.apache.org/plugins/maven-war-plugin-2.1-alpha-2/overlays.html

    2、http://maven.apache.org/plugins/maven-war-plugin/overlays.html

    展开全文
  • webapp里,那么这个maven webapp会太大,而且在业务上也比较分散 但是这些持有js、css、jsp的maven工程,如果packaging设置为jar是不合适的,因为外围要读取内部的这些文件就会很困难。在这种场景下,一个很自然的...

    在一个大项目中拆分maven工程时,很有可能会把js、css、jsp等文件放在不同的工程里(根据业务模块划分)。因为如果都集中在一个maven
    webapp里,那么这个maven webapp会太大,而且在业务上也比较分散

    但是这些持有js、css、jsp的maven工程,如果packaging设置为jar是不合适的,因为外围要读取内部的这些文件就会很困难。在这种场景下,一个很自然的想法就是打成war包,然后用某种方式将多个war包归并起来,得到最终的war包。

    可以使用maven-war-plugin的overlays来完成合并war包的任务。
    官方说明文档:http://maven.apache.org/plugins/maven-war-plugin/overlays.html

    例如,某项目中有两个war包,分别为base和business,我们想将base合并到business中,可以进行如下操作:

    • base工程:
      合并前的资源情况:
      在这里插入图片描述
      pom.xml:
      在这里插入图片描述

    • 主war包business工程

      合并前:
      在这里插入图片描述
      因为business工程是主war包,所以在pom.xml进行如下设置:
      1.将需要归并的war包base的坐标引入pom.xml

    <dependencies>
      	<dependency>
      		<groupId>edu.cpu</groupId>
    	    <artifactId>base</artifactId>
    	    <version>0.0.1-SNAPSHOT</version>
    	    <type>war</type>
      	</dependency>
      </dependencies>
    

    2.加入maven-war-plugin插件,设置overlays属性

    <build>	
      	<plugins>
    	  	<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-war-plugin</artifactId>
    			<version>2.4</version>
    			<configuration>
    				<warSourceDirectory>src/main/webapp</warSourceDirectory>
    				<failOnMissingWebXml>false</failOnMissingWebXml>
    				<archiveClasses>false</archiveClasses>
    				<overlays>
    					<overlay>
    						<!-- 需要归并的webapp的groupId和artifactId -->
    						<groupId>edu.cpu</groupId>
    						<artifactId>base</artifactId>
    					</overlay>
    				</overlays>
    			</configuration>
    		</plugin>
      	</plugins>
      </build>
    

    其中overlay元素中的坐标是待归并的工程坐标,例子中是base工程。

    mvn install后,主war包business的结构如下:
    在这里插入图片描述

    注意:这里如果待归并工程和归并主工程有同名文件,以主工程文件为主,待归并工程的同名文件会被覆盖,包括web.xml

    展开全文
  • 在一个大项目中拆分maven工程时,通常会根据业务模块进行拆分。无论怎么划分,往往每个模块又需要集成权限管理orm或者说依赖 静态资源web公共模块。而为了避免资源的浪费,或者是希望一次登录,可以访问多个模块, 也...
  • 主要参考了: http://blog.csdn.net/xiaokui008/article/details/8592811 http://www.tuicool.com/articles/ArE3iaA ... ... 在一个大项目中拆分maven工程时,通常会根据业务模块进行拆分。无
  • ... 在一个大项目中拆分maven工程时,很有可能会把js、css、jsp等文件放在不同的工程里(根据业务模块划分)。因为如果都集中在一个maven webapp里,那么这个maven webapp会太大,而且在业务
  • Atitit maven 编译与资源文件与web目录自定义配置 与eclipse的集成与war包打包 1.1. 配置webapp目录 plugin设置 webappDirectory 11.2. Maven 配置maven不要乱编译, 指定sourceDirectory为srcnone 21.3. 指定maven...
  • 今天在整理版控的时候发现了pom中的overlays配置,记录学习如下:...因为如果都集中在一个maven webapp里,那么这个maven webapp会太大,而且在业务上也比较分散 但是这些持有js、css、jsp的maven工程,如果pac
  • maven 多web项目合并war

    2014-12-03 09:54:27
    此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过。    最近一直在搞fixflow5.2的升级工作,以前只知道maven好用,但是一直没机会接触,这次由于工作需要,终于有空看下maven了。 ...
  • Eclipse整合maven详细步骤及问题解决方案 本来是想学习搭建SSM框架,网上说使用maven项目管理工具更加方便,于是追求高效的我开始走上这条不归路,一步一个坎儿,利用空闲时间折腾了好几天,终于是给弄好了,下面...
  • 选择:Maven >org.apache.maven.archetypes:maven-archetype-webapp,Next Next Next 注意:在Properties列表添加archetypeCatalog=local Next 完成 创建目录结构 设置源代码目录(这步最好在上一步之后,
  • 在一个大项目中拆分maven工程时,很有可能会把js、...因为如果都集中在一个maven webapp里,那么这个maven webapp会太大,而且在业务上也比较分散  但是这些持有js、css、jsp的maven工程,如果packaging设置为ja
  • <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
  • 在项目管理的过程中,初期可能一个项目并不大,所以建立了一个独立的web项目,但随着项目的发展,业务功能越来越多,但从业务依赖的角度来说,却是可以划分为多项目的。于是需要将这个庞大的web项目拆分成一个个独立...
  • 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过。  最近一直在搞fixflow5.2的升级工作,以前只知道maven好用,但是一直没机会接触,这次由于工作需要,终于有空看下maven了。  ...
  • Maven把一个工程划分为模块来开发,也就是Maven模块的开发与合并,每一个模块对应MVC开发模式的每一层。 一、使用IDEA对Maven工程拆分合并 1.创建父工程 父工程的作用就是在其pom.xml文件中统一管理子模块所需要的...
  • Maven项目合并

    2019-07-11 10:10:13
    当多个项目之间有关联、依赖jar包有重复时,可以考虑进行合并。举例,我一开始有一个test-pilling项目,pom文件如下: <project xmlns=...
1 2 3 4 5 ... 20
收藏数 1,937
精华内容 774
关键字:

maven合并webapp