zoukankan      html  css  js  c++  java
  • Maven Web项目部署到Tomcat下问题

    但是也遇到了很多问题,下面记录一下Web项目部署到Tomcat下的问题

    1、普通的WEB项目,就是虽然是用maven搭建的,但是没有使用profiles.xml文件来配置参数。这样的项目可以通过以下的方式进行部署:

        直接mvn clean package -DskipTests,进行打包,

     1) 然后在可以把war包拷到tomcat目录下的Webapp目录下

     2)修改tomcat目录下的conf目录下的server.xml文件,在Host标签之间添加如下一句话:

          <Context docBase="D:IdeaProjectsTestexampleexample-web argetexample-   web" reloadable="false" path=""/>

    2、使用profiles.xml配置了默认参数,而在web的配置文件中使用到了这些参数,这个时候使用命令打包的时候要指定你要使用哪一个profiles id来装配你的项目,命令如下mvn clean package -P development ,其中-p是指启用哪一个profiles id。然后下面部署到tomcat的方法和上面的就一样了

    使用maven的话推荐一个IDE工具 Intellij IDEA,他可以直接通过视图话的方式进行指定profiles id。

    下面转一篇文章,讲profile的

     Profiles是maven的一个很关键的术语:profile是用来定义一些在build lifecycle中使用的environmental variations,profile可以设置成在不同的环境下激活不同的profile(例如:不同的OS激活不同的profile,不同的JVM激活不同的profile,不同的dabase激活不同的profile等等)。
     
    定义Profiles
     
    你可以把profiles定义在4个地方:
    1、%M2_HOME%/conf/settings.xml,这是针对该部电脑的所有user的profiles,是global profiles,它会影响所有的maven project build 
     
    2、<your -home-directory>/.m2/settings.xml,这是针对per user的profiles,是user级的profiles,它会影响当前user的所有maven project build 
     
    3、定义在pom.xml文件里面,这是仅针对该project的profiles,是project级的profiles 
     
    4、profiles.xml,它和pom.xml在同一个目录下,也是project级的profiles,使用profiles.xml的目的是希望把profiles的设置从pom.xml里抽离出来设置。 
     
    定义在这4个地方的profiles中,涉及范围越窄的profiles会覆盖范围越宽的profiles。即:定义在pom.xml里profiles会覆盖profiles.xml的,profiles.xml的会覆盖<your -home-directory>/.m2/settings.xml的,<your -home-directory>/.m2/settings.xml的会覆盖%M2_HOME%/conf/settings.xml的。
     
    不过请注意:设置在pom.xml里的profiles是最最推荐的,因为pom.xml会被deploy到repository里,所以pom.xml里的profiles才会available for subsequent builds originating from the repository or as transitive dependencies。而settings.xml和profiles.xml里定义的profiles不会被deploy到repository,则有诸多限制,因此,只有下面几个profiles能够在settings.xml和profiles.xml里定义:
    repositories 
    pluginRepositories 
    properties 
     
    其他类型的profiles必须在pom.xml里定义(上面3个profiles也可以在pom.xml里定义)。
     
    Pom.xml能够定义的profiles包括:
    <repositories> 
    <pluginRepositories> 
    <dependencies> 
    <plugins> 
    <properties> (not actually available in the main POM, but used behind the scenes) 
    <modules> 
    <reporting> 
    <dependencyManagement> 
    <distributionManagement> 
    a subset of the <build> element, which consists of: 
    <defaultGoal> 
    <resources> 
    <testResources> 
    <finalName> 
     
    2、激活Profiles
     
    激活profiles有下列几种方式:
    Explicitly 
    Through Maven settings 
    Based on environment variables 
    OS settings 
    Present or missing files 
     
    1)通过mvn命令的-P参数来显示激活profiles,该参数值是profile id list(之间用逗号连接)。如:
    mvn groupId:artifactId:goal -P profileId-1,profileId-2
     
    2)                        通过在settings.xml里设置<activeProfiles> element来激活(当然<profiles>也必须在settings.xml里定义)
    <settings>
     ...
              <profiles>
     <profile>
        <id>profile1</id>
        ...
     </profile>
              </profiles>
     
     <activeProfiles>
        <activeProfile>profile-1</activeProfile>
     </activeProfiles>
     ...
    </settings>
     
                列在<activeProfiles>里的profiles list会在每一个project执行时被激活
     
    3)Profiles还可以基于detect到的build environment 的state来自动激活,而不需要象上面2种方式显式激活。这只需要在profile定义时使用<activation> element。如:
    <profiles>
     <profile>
        <activation>
          <jdk>1.4</jdk>
        </activation>
        ...
     </profile>
    </profiles>
    上面的代码表示:如果JDK version start with 1.4 (eg. "1.4.0_08", "1.4.2_07", "1.4"),该profile会被激活
     
    <profiles>
     <profile>
        <activation>
          <property>
            <name>debug</name>
          </property>
        </activation>
        ...
     </profile>
    </profiles>
    上面的代码表示:如果存在system propertie “debug”,该profile会被激活。为了激活它,输入的命令类似于:
    mvn groupId:artifactId:goal –Ddebug 
     
    <profiles>
     <profile>
        <activation>
          <property>
            <name>environment</name>
            <value>test</value>
          </property>
        </activation>
        ...
     </profile>
    </profiles>
    上面的代码表示:如果存在system propertie “environment”的值为test,该profile会被激活。为了激活它,输入的命令类似于:
    mvn groupId:artifactId:goal -Denvironment=test


    4)Profiles还可以基于OS setting来自动激活
    <profiles>
     <profile>
        <activation>
          <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
            </activation>
     ...
     </profile>
    </profiles>
                上面的代码表示:如果OS为windows xp,该profile会被激活
     
    5)根据某个file不存在而激活profile。例如下面定义的profile是在target/generated-sources/axistools/wsdl2java/org/apache/maven不存在时激活
    <profiles>
     <profile>
        <activation>
          <file>
            <missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
          </file>
        </activation>
        ...
     </profile>
    </profiles>
     
     
    使用Profiles时要注意的2个问题
     
    第一、external properties
     
    不是定义在pom.xml里的properties都称为external properties。举例说明最明了:
    pom.xml:
    <project>
     ...
     <build>
        <plugins>
          <plugin>
            <groupId>org.myco.plugins</groupId>
            <artifactId>spiffy-integrationTest-plugin</artifactId>
            <version>1.0</version>
            <configuration>
              <appserverHome>${appserver.home}</appserverHome>
            </configuration>
          </plugin>
          ...
        </plugins>
     </build>
     ...
    </project>
     
    ~/.m2/settings.xml
    <settings>
     ...
     <profiles>
        <profile>
          <id>appserverConfig</id>
          <properties>
            <appserver.home>/path/to/appserver</appserver.home>
          </properties>
        </profile>
     </profiles>
     
     <activeProfiles>
        <activeProfile>appserverConfig</activeProfile>
     </activeProfiles>
     ...
    </settings>
     
    当你执行该pom时,运行正常。但如果another user执行时,则运行失败,因为无法解析${appserver.home}(这是由于该properties是定义在user级别的settings.xml)。
     
    解决方法就是把该profile放到pom.xml里定义,但这样做的缺点是所有使用该profile的pom.xml每个都要定义一次该profile。
     
    最好的解决方法是:Since Maven provides good support for project inheritance, it's possible to stick this sort of configuration in the pluginManagement section of a team-level POM or similar, and simply inherit the paths
     
     
    第二、pom.xml里定义的profiles不符合激活条件
    依然是举个例子:
    pom.xml:
    <project>
     ...
     <profiles>
        <profile>
          <id>appserverConfig-dev</id>
          <activation>
            <property>
              <name>env</name>
              <value>dev</value>
            </property>
          </activation>
          <properties>
            <appserver.home>/path/to/dev/appserver</appserver.home>
          </properties>
        </profile>
     
        <profile>
          <id>appserverConfig-dev-2</id>
          <activation>
            <property>
              <name>env</name>
              <value>dev-2</value>
            </property>
          </activation>
          <properties>
            <appserver.home>/path/to/dev/appserver2</appserver.home>
          </properties>
        </profile>
     </profiles>
     
     <build>
        <plugins>
          <plugin>
            <groupId>org.myco.plugins</groupId>
            <artifactId>spiffy-integrationTest-plugin</artifactId>
            <version>1.0</version>
            <configuration>
              <appserverHome>${appserver.home}</appserverHome>
            </configuration>
          </plugin>
          ...
        </plugins>
     </build>
     ...
    </project>
     
    上面定义的pom.xml定义了两个profile:不同的”env”参数值会激活不同的profile。当执行命令:
    mvn -Denv=dev-2 integration-test
    就会激活profile “appserverConfig-dev-2”
     
    当执行命令:
    mvn -Denv=dev integration-test
    就会激活profile “appserverConfig-dev”
     
    而当执行命令:
    mvn -Denv=production integration-test
    则运行失败,因为没有激活任何一个profile,因此无法解析${appserver.home}。
     
     
    查看build time过程中使用了哪些Profiles
    执行help plugin的active-profiles goal,使用命令:
                mvn help:active-profiles
     
    例子:
    对于上面的例子,如果输入命令:
                mvn help:active-profiles -Denv=dev
    则输出的是:
    The following profiles are active:
     
     - appserverConfig-dev (source: pom)
     
    如果有一个profile定义在settings.xml里并使用<activeProfile>激活,那么输入命令:
                mvn help:active-profiles
    则输出的是:
    The following profiles are active:
     
     - appserverConfig (source: settings.xml)
     
     
    如果输入命令:
                mvn help:active-profiles -P appserverConfig-dev
    那么输出的是:
    The following profiles are active:
     
     - appserverConfig-dev (source: pom)
     - appserverConfig (source: settings.xml)

    http://www.jb51.net/article/115084.htm

  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/fpcbk/p/8938263.html
Copyright © 2011-2022 走看看