Maven的简介、安装、项目创建、所遇问题及解决、maven与Tomcat联调


                                                                              一路磕磕绊绊,一路摸索向前!


简介篇:

maven是什么
       maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。当前使用Maven的项目在持续增长。

                                          

什么是项目构建
       项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程

传统项目构建过程

构建过程如下:
       1)在IDEA中创建一个java web工程       2)在工程中编写源代码及配置文件等       3)对源代码进行编译,java文件编译成class文件       4)执行Junit单元测试       5)将工程打成war包部署至tomcat运行

maven项目构建过程
       maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段:

Maven命令列表

mvn –version

显示版本信息

mvn clean

清理项目生产的临时文件,一般是模块下的target目录

mvn compile

编译源代码,一般编译模块下的src/main/java目录

mvn package

项目打包工具,会在模块下的target目录生成jar或war等文件

mvn test

测试命令,或执行src/test/java/下junit的测试用例.

mvn install

将打包的jar/war文件复制到你的本地仓库中,供其他模块使用

mvn deploy

将打包的文件发布到远程参考,提供其他人员进行下载依赖

mvn site

生成项目相关信息的网站

mvn eclipse:eclipse

将项目转化为Eclipse项目

mvn dependency:tree

打印出项目的整个依赖树  

mvn archetype:generate

创建Maven的普通java项目

mvn tomcat:run

在tomcat容器中运行web应用 需要插件支持 只有tomcat1.7的插件,没有1.8的

所以tomcat8.0用不了此命令

mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基本命令:【参考https://www.cnblogs.com/MyFavorite/archive/2012/03/18/2404330.html

1. mvn help:describe 你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的。参数: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”) 下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!

2. mvn archetype:generate 你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,只需输入archetype:generate,剩下的就是做”选择题”了.

3. mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用: 1. 跳过测试:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.

4. mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.

5. mvn dependency:sources 故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了

maven工程构建的优点:1、一个命令完成构建、运行,方便快捷。2、maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

什么是依赖管理
       什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。

       举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,具体它依赖的Hibernate、Spring、Struts2。

       什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。

传统项目的依赖管理
       传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,如下图:程序员手工将Hibernate、struts2、spring的jar添加到工程中的WEB-INF/lib目录下。

手工拷贝jar包添加到工程中的问题是:1、没有对jar包的版本统一管理,容易导致版本冲突。2、从网上找jar包非常不方便,有些jar找不到。3、jar包添加到工程中导致工程过大。

maven项目的依赖管理
       maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的座标,自动从maven仓库中下载jar包、运行。

使用maven依赖管理添加jar的好处:1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。2、maven工程可以自动从maven仓库下载jar包,非常方便。

Maven的优点:
通过上边介绍传统项目和maven项目在项目构建及依赖管理方面的区域,maven有如下的好处:

1、一步构建:maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。2、依赖管理:maven工程不用手动导jar包,通过在pom.xml中定义座标从maven仓库自动下载,方便且不易出错。3、maven的跨平台,可在window、linux上使用。4、maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。

Maven项目工程目录约定:

src/main/java —— 存放项目的.java文件

src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件

src/test/java —— 存放所有单元测试.java文件,如JUnit测试类

src/test/resources —— 测试资源文件

target —— 项目输出位置,编译后的class文件会输出到此目录

pom.xml——maven项目核心配置文件

Project

  |-src

  |   |-main

  |   |  |-java        —— 存放项目的.java文件

  |   |  |-resources   —— 存放项目资源文件,如spring, hibernate配置文件

         |-webapp     —— webapp目录是web工程的主目录

            |-WEB-INF

              |-web.xml

  |   |-test

  |      |-java        ——存放所有测试.java文件,如JUnit测试类

  |      |-resources   —— 测试资源文件

  |-target             —— 目标文件输出位置例如.class、.jar、.war文件

  |-pom.xml           ——maven项目核心配置文件

不管是软件创建,还是手动创建Maven的目录结构,工程的目录必须遵循上面的结构。如图所示 IDEA 创建出来的Maven项目结构如下


maven安装篇:

  • 1将下载的 maven 压缩包解压到本地,如 D:\Maven\apache-maven-3.6.1。
  • 2右键---计算机属性----高级系统设置---高级---环境变量---系统变量----新建    

      变量名:MAVEN_HOME

      变量值:D:\Maven\apache-maven-3.6.1  

     注意:这个值是 maven 压缩包解压的位置,如下图所示:

  • 3将 MAVEN_HOME 添加到 path 目录下。

    选择 path---编辑---新建---将 %MAVEN_HOME%\bin  添加进去,然后点击确定就可以了,如下图所示:

  • 4查看 Maven 环境变量是否配置成功

    打开命令提示符,快捷键 windows+R.输入 mvn -v 

    如果出现如下maven 的版本信息,那么就配置成功,如下图所示:

  • 修改maven安装位置下的conf文件夹内的 settings.xml ,指定本地仓库地址。添加标签语句:<localRepository>自定义路径</localRepository>,如下图所示:


新建maven项目篇:

  • 使用vscode新建maven工程

  • 选择create maven project后,即可根据提示创建目标工程。如:maven-archetype-webapp,而后选择版本。【下图为项目相关信息,输入后回车即可。】
  • -DgourpId: 组织名,公司网址的反写 + 项目名称
  • -DartifactId: 项目名-模块名
  • -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
  • -DinteractiveMode: 是否使用交互模式

  • pom.xml文件的配置

在Maven中,pom.xml文件是项目配置的核心,它包含构建项目所需的主要信息。在上面的示例中,自动生成了pom.xml文件,其中的标签“packaging”为“war”—注意这里不是“jar”。当使用Maven构建项目时,该项目将自动打成war包用来部署。 

 

第一次运行错误一:pom.xml文件第一行报错!

Failed to read artifact descriptor for junit:junit:jar:4.11

org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for junit:junit:jar:4.11
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:255)
at

······


at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:482)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:400)
... 43 more
Java(0)

Missing artifact junit:junit:jar:4.11Java(0)

第一次运行错误二:

CoreException: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:3.8.0: ArtifactResolutionException: Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:pom:3.8.0 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.8.0 from/to central (https://repo.maven.apache.org/maven2): connect timed outJava(0)

解决方案:

以上两个错误是同时发生的。我找到了第一个错误所提示的【Failed to read artifact descriptor for junit:junit:jar:4.11】,然后定位到仓库中的如下文件夹。然后把 junit-4.11.jar 文件名修改为了 4.11.jar。然后回到terminal输入mvn install命令,重新把包加载一遍。然后惊奇的发现错误消失了,而且两个错误全消失了!

 

Maven添加 jar 包依赖:

老铁,记住喽!网址:https://mvnrepository.com/ 。上面会给出所需包引用方式。

 

【方法一】Maven与Tomcat联调(现在突然意识到自己徒劳了······,行不通。)

1、打开tomcat的安装目录的 conf/tomcat-users.xml,添加以下内容:

    <role rolename="admin-gui"/>  

    <role rolename="admin-script"/>  

    <role rolename="manager-gui"/>  

    <role rolename="manager-script"/>  

    <role rolename="manager-jmx"/>  

    <role rolename="manager-status"/>  

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

(2)为了让maven可以访问tomcat的权限,所以需要把如上创建的用户添加到maven安装目录下conf中的settings.xml中的servers标签内。

<!-- 配置tomcat-/manager/text 访问权限 -->

<server>

<id>tomcat</id>

<username>admin</username>

<password>admin</password>

</server>

(3)配置工程目录下的pom.xml文件,加入build,并配置tomcat7的maven插件,即在项目下pom.xml文件中的<plugins>标签内加入:

???

【方法二】Maven与Tomcat手动联调(无须法一配置,直接打开)

 

  • 启动 tomcat,将上面生成的 .war 文件手动复制到 tomcat 安装目录的 webapps 文件夹下,假设 .war 的文件名为 learn-web在浏览器输入http://localhost:8080/learn-web/index.jsp

我这路径虽然乱,但思想是上面的思想。

 


 

参考及致谢:

https://www.cnblogs.com/best/p/9676515.html

https://blog.csdn.net/m0_37167369/article/details/81628305

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章