maven目录结构:下面的是javaee的结构显示模式。

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat

maven项目的生命周期:清理clean、编译compile、测试test、打包package、安装install 

pom.xml相关解释:

sts配置tomcat:(这里配置的tomcat在sts中右键service然后启动,这里和在终端中启动tomcat是两个不一样,只能同时启动一个,否则会报错。)

1.sts-》preferences-->server-->Runtime Environments点击add-》选中tomcat版本-》next-》在browse...中找到本地tomcat的目录后点击next,或者是finish即可。

2.选中项目右击-》properties-》java build path-》 Libraries-》点击 Add Library-->server runtime-->选择tomcat-->finish。

***maven的下载地址:http://maven.apache.org/download.cgi

mac上使用建议下载Binary zip archive这个。

Binary:编译之后的二进制文件

Source:表示可以查看源代码的,比Binary大一点

tar.gz archive:Linux、macOS系统使用

zip archive:windows系统使用

 

***maven的环境变量配置:

1.在终端输入  vim ~/.bash_profile,进入到环境变量配置文件里面;

2.进入后,是read模式,按下 i (编辑)键,进入insert模式;

3.将环境变量加入其实,环境变量如下:

      export MAVEN_HOME=/Users/HaokeMaster/Downloads/apache-maven-3.6.3

       export PATH=$PATH:$MAVEN_HOME/bin

4.按下 ESC,退出insert模式;

5.输入 :wq (保存修改)退出当前文件;

6.使修改的环境变量bash_profile文件生效,输入 source .bash_profile,按下Enter键即可.

7.检测maven安装成功与否:mvn -v

出现以下表示安装成功:

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/HaokeMaster/Downloads/apache-maven-3.6.3
Java version: 10.0.1, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"

***maven的相关设置:conf->settings.xml

设置maven仓库:仓库就是我们通过maven下载的jar包存放的地方

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat_02

<localRepository>/Users/HaokeMaster/Downloads/apache-maven-3.6.3/repository</localRepository>

换成阿里云镜像:

  

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat_03

<mirror>

        <id>alimaven</id>

        <name>aliyun maven</name>

        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

        <mirrorOf>central</mirrorOf>

    </mirror>

*******************创建maven项目***********************

新建maven项目:先配置eclipse的maven  settings.xml,然后一步一步创建,右键new->others->maven project->

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven多模块项目打包 引入其他项目_04

构建索引(快速查找到jar包):windows->show view ->other->搜索maven,选择maven respository->

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven多模块项目打包 引入其他项目_05

如果新建完之后,项目的目录是不对的。解决办法:

右键项目属性 -> Java Build Path -> JRE SYSTEM LIBRARY -> 编辑 -> Workspace default JRE -> Apply 即可生成正确的目录结构

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven_06

 

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_xml_07

 

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven多模块项目打包 引入其他项目_08

 

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_xml_09

***********maven部署项目到tomcat:(使用tomcat-maven插件部署)

1.配置tomcat信息和权限,tomcat7.0\conf\tomcat-users.xml。打开 Tomcat 的 manager 功能,找到 conf 文件夹下的 tomcat-users.xml文件中的 <tomcat-users>标签,然后添加如下内容(可以直接在其文档注释部分找到对应的模版,然后进行修改):

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven_10

<role rolename="manager-gui"/>
<role rolename="manager" />
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager,manager-script"/>

 

如果已经有了相关用户信息信息,就不用添加了,但是权限要加上

 <role rolename="manager-gui"/>
 <role rolename="manager" />
 <role rolename="manager-script"/>

tomcat配置成功后在浏览器打开localhost:8088/manager

2.配置maven,maven\conf\settings.xml

<servers>  
   <server>  
     <id>tomcat9</id>  
     <username>tomcat</username>  
     <password>tomcat</password>  
   </server>  
 </servers> 
这里的用户名密码要和服务器配置的用户名密码一致

3.在eclipse中配置pom.xml

常用pom属性解释:

 ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.                                ${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.                

 ${project.build.directory}:项目构建输出目录,默认为target/.                                                                ${project.build.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.                  ${project.build.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.                                                                                
${project.groupId}:项目的groupId.                                                                                                                                     ${project.artifactId}:项目的artifactId.                                                                                                                          

 ${project.version}:项目的version,于${version}等价                                                                                             ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}${project.version}.

<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>
  <groupId>lambo</groupId>
  <artifactId>testone</artifactId>
  <version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
  <name>Myfirstmaven</name>
  <description>我的第一个maven</description>
  
 <dependencies>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.1</version>
   <scope>provided</scope>
  </dependency>
 </dependencies>
 <build>
  <!-- 设置war包名称 -->    
    <finalName>testone</finalName>  
		<plugins>
		<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<!-- 直接访问 Tomcat 服务器的 manager -->
					<url>http://localhost:8088/manager</url>
					<server>tomcat9</server><!-- 此处的名字必须和setting.xml中配置的ID一致-->
					<username>tomcat</username>
					<password>tomcat</password>
					<skip>true</skip><!-- 跳过测试 -->
					<update>true</update>
					<ignorePackaging>false</ignorePackaging>
					<path>/testone</path><!-- 此处的名字是项目发布的工程名-->
				</configuration>
			</plugin>
 
		</plugins>
	</build>
  <pluginRepositories>
    <pluginRepository>
        <id>apache.snapshots</id>
        <name>Apache Snapshots</name>
        <url>http://repository.apache.org/content/groups/snapshots-group/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>
</project>

4.执行命令,先启动tomcat9。

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat_11

1)Run as → clean install
2)Run as → tomcat7:deploy 注:第1次部署执行
3)Run as → tomcat7:redeploy 注:第2次或以后需要重新发布执行
4)Run as → tomcat7:run 注:部署到 tomcat 中启动(执行之前先关闭tomcat9,如果部署到本地,防止端口占用启动不了)

 

******eclipse中使用tomcat启动web项目的流程

eclipse中使用tomcat启动web项目的流程是 java build path编译项目源代码生成的class文件放到buildpath的设置路径中,根据web deployment assembly将项目中的各个资源发布到设置的指定文件。

*******eclipse中转换成web项目:

解决方案:

1.如果是新建或新导入的Maven web项目,选中项目右键->maven->update project

2.选中项目右键->properties->project facets->选中Dynamic Web Module和java,

 

*********eclipse中maven项目部署到tomcat的几种方法:********


1.打成war包,这中方法不需要为IDE编辑器配置tomcat,直接把打成的war包放到外部tomcat即可(eclipse中的项目->右键->Run as->maven->maven install,然后在target文件夹下找到xx.war),放到tomcat/webapps目录中(或者自己指定的deploy  path目录中),在浏览器地址栏输入localhost:8088/manager,然后下面就会列出项目:

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat_12

 

2.直接使用servers 在eclipse中部署到tomcat:这个要给eclipse配置tomcat(适合本地的调试。)

创建maven项目,相关配置参考最上面的几步,然后启动服务器:widow-》show view-》other-》Servicer-》servicers(双击tomcat,选择第二个选项Use Tomcat installation(第一个是默认的tomcat组件加载到eclipse中,第二个是自己配置的外部tomcat),然后部署路径deploy path选择webapps); 

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_tomcat_13

注意事项:

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven_14

启动服务器,运行项目run as-》run on server;

打包:maven  inatall后,在target中就会多出一个文件夹和.war文件。

 

3. 使用tomcat-maven插件,(适合直接部署到测试服务器):

注意: tomcat的webapps中的manager应用不能删除,

修改webapps/manager/META-INF/conetxt.xml配置 ,manager应用默认为只能本机访问,修改为所有ip都可访问

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /><!--只有本机可以访问-->
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="^.*$" /><!--所有IP都可以访问-->

 

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_xml_15

 maven中setting.xml的设置:

<servers> <server> <id>tomcat9</id> <username>tomcat</username>//用户名 <password>tomcat</password>//密码 </server> </servers>

sts中pom.xml添加tomcat插件:

<build>
  <!-- 设置war包名称 -->    
    <finalName>testone</finalName>  
		<plugins>
		<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<!-- 直接访问 Tomcat 服务器的 manager -->
					<url>http://localhost:8088/manager/text</url><!--必须要是这个url-->
					<server>tomcat9</server><!-- 此处的名字必须和maven中setting.xml中配置的ID一致-->
					<username>tomcat</username>
					<password>tomcat</password>
					<skip>true</skip><!-- 跳过测试 -->
					<update>true</update>
					<ignorePackaging>false</ignorePackaging>
					<path>/testone</path><!-- 此处的名字是项目发布的工程名-->
				</configuration>
			</plugin>
 
		</plugins>
	</build>
  <pluginRepositories>
    <pluginRepository>
        <id>apache.snapshots</id>
        <name>Apache Snapshots</name>
        <url>http://repository.apache.org/content/groups/snapshots-group/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

 

1.启动tomcat,2.tomcat(tomcat7.0\conf\tomcat-users.xml)、maven(maven\conf\settings.xml)、eclipse(pom.xml)分别做相应配置(参考最上面的几个步骤),运行项目Run as  ->maven build ->

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven_16

部署完成后(tomcat中webapp文件夹下会出现testone文件夹和tetsone.war包),会有相关信息出现:

INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ testone ---

[INFO] Deploying war to http://localhost:8088/testone

Uploading: http://localhost:8088/manager/text/deploy?path=%2Ftestone&update=true

INFO] tomcatManager status code:200, ReasonPhrase:

[INFO] OK - 以应用path [/testone] 部署应用

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

maven多模块项目打包 引入其他项目 maven项目打包部署到tomcat_maven多模块项目打包 引入其他项目_17

****tomcat开启远程管理Manager(IP权限问题):

1.开启远程访问,两种方式

    a.打开若没有则新建

/conf/Catalina/localhost/manager.xml
内容为:
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"   
         docBase="${catalina.home}/webapps/manager">  
             <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />  
</Context> 
 b.修改/webapps/manager/META-INF/context.xml,注释掉value里内容
<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
改为
<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="^.*$" /></Context><!--所有IP都可以访问-->
或者直接吧Context之间的内容注释掉。

Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到、或者是不太需要使用Tomcat默认的manager管理页面时一般都会把Tomcat的默认webapp下的内容给删除了,但是如果需要使用Tomcat默认的manager来管理项目时就需要保留相应的文件目录。在Tomcat中的webapps中有如下目录:docs(Tomcat本地说明文档)、examples(Tomcat相关的deamon示例)、host-manager(主机头管理工具)、manager(项目管理工具)、ROOT(Tomcat默认页),其中需要保留的是host-manager、manager、ROOT这3个目录而从Tomcat 6开始为了安全缺省条件下Tomcat的host-manager、manager是不能访问的(http 401拒绝),如需访问需要分配相关的角色权限。

 

*****如果tomcat启动成功,但是managerapp不能访问(角色权限问题),需要添加如下:

在tomcat安装目录下conf下的tomcat-users.xml配置文件中添加如下。

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui,manager-jmx,manager-script,manager-status"/>

 

从Tomcat 7开始安全机制下默认仅允许本机访问Tomcat,如需远程访问Tomcat的管理页面还需要配置相应的ip允许规则,配置manager的context.xml。也可以在${catalina.home}/conf/Catalina/localhost目录下配置2个contest.xml文件,也可以写成一个,但是建议写成2个便于日常的权限管理,如下:

manager.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

host-manager.xml: 
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/host-manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
其中allow中是填ip可以使用正则表达式匹配,在内网中建议写成匹配某某网段可以访问的形式,如此Tomcat的manager页面访问配置就完成了

*******(IP权限的问题)tomcat/conf/Catalina/localhost(或者其他ip地址)/manager.xml(mananger没有则创建)

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"   
         docBase="${catalina.home}/webapps/manager">  
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />  
</Context>

 

 

********pom.xml详解

maven依赖的原则;第一声名原则,路径优先原则,

properties:提取版本号,下面的使用中只需要${properties中定义的版本号}

dependencyManagement:锁定版本,其他地方的版本号都失效,以这里定义的为准;

dependencies:依赖

exclusions:将插件中的包排出掉

build-plugins:插件,需要project update