maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

2023-11-20

maven学习笔记

一、什么是maven

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。简而言之,Maven是一个跨平台的项目管理工具。主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。

二、下载和安装Maven

访问Maven的下载页面:http://maven.apache.org/download.html,其中包含针对不同

平台的各种版本的Maven下载文件。对于首次接触Maven的读者来说,推荐使用Maven

3.0,因此下载apache-maven-3.0-bin.zip。

将安装文件解压到你指定的目录;

下一步就是设置环境变量,将 Maven安装配置到操作系统环境中。

打开系统属性面板(桌面上右键单击“我的电脑”→“属性”),点击高级系统设置,再点击环境变量,在系统变量中新建一个变量,变量名为 M2_HOME,变量值为 Maven 的安装目录 (例如:D:\bin\apache-maven-3.0)。点击确定,接着在系统变量中找到一个名为 Path 的变量,在变量值的末尾加上%M2_HOME%\bin;,注意多个值之间需要有分号隔开,然后点击确定。至此,环境变量设置完成。

这里需要提一下的是 Path 环境变量,当我们在 cmd 中输入命令时,Windows 首先会在当前目录中寻找可执行文件或脚本,如果没有找到,Windows 会接着遍历环境变量 Path 中定义的路径。由于我们将%M2_HOME%\bin 添加到了 Path 中,而这里%M2_HOME%实际上是引用了我们前面定义的另一个变量,其值是 Maven 的安装目录。因此,Windows 会在执行命令时搜索目录D:\bin\apache-maven-3.0\bin,而 mvn 执行脚本的位置就是这里。

打开黑窗口,检查我们是否安装mvn成功。

这就代表Maven安装成功.

第一条命令echo %M2_HOME%用来检查环境变量是否指向了正确的Maven安装目录;而mvn -v执行了第一条 Maven命令,以检查Windows 是否可以找到正确的mvn执行脚本。

q Bin:该目录包含了 mvn 运行的脚本,这些脚本用来配置 Java 命令,准备好classpath 和相关的 Java 系统属性,然后执行 Java 命令。其中 mvn 是基于 UNIX 平台的 shell 脚本,mvn.bat是基于 Windows 平台的 bat 脚本。在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。该目录还包含了 mvnDebug 和mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 windows的 bat 脚本。那么 mvn 和 mvnDebug 有什么区别和关系呢?打开文件我们就可以看到,两者基本是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,作用就是在运行 Maven 时开启 debug,以便调试 Maven 本身。此外,该目录还包含 m2.conf 文件,这是classworlds 的配置文件。

q Boot: 该目录只包含一个文件,以maven 3.0 为例,该文件为plexus-classworlds-2.2.3.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。更多关于classworlds的信息请参考 http://classworlds.codehaus.org/。对于一般的Maven用户来说,不必关心该文件。

q Conf: 该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。一般情况下,我们更偏向于复制该文件至~/.m2/目录下(这里~表示用户目录),然后修改该文件,在用户范围定制 Maven的行为。本书的后面将会多次提到该 settings.xml,并逐步分析其中的各个元素。

q  Lib: 该目录包含了所有 Maven 运行时需要的 Java 类库,Maven 本身是分模块开发的,因此用户能看到诸如 mavn-core-3.0.jar、maven-model-3.0.jar 之类的文件,此外这里还包含一些 Maven 用到的第三方依赖如 common-cli-1.2.jar、google-collection-1.0.jar 等等。(对于 Maven 2 来说,该目录只包含一个如 maven-2.2.1-uber.jar 的文件原本各为独立 JAR 文件的 Maven 模块和第三方类库都被拆解后重新合并到了这个 JAR 文件中)。可以说,这个 lib 目录就是真正的 Maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到 Maven 内置的超级POM。其他: LICENSE.txt 记录了 Maven 使用的软件许可证 Apache License Version 2.0; NOTICE.txt 记录了 Maven 包含的第三方软件;而 README.txt 则包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等等。

关于~/.m2:

默认情况下,~/.m2 目录下除了 repository 仓库之外就没有其他目录和文件了,不过大多数 Maven 用户需要复制 M2_HOME/conf/settings.xml 文件到~/.m2/settings.xml。这是一条最佳实践。

默认情况下,该文件夹下放置了Maven本地仓库.m2/repository。所有的Maven的构件都被存储到该仓库中,以方便重用。

四、在IDEA上编写一个简单的maven项目

新建一个工程,选择Maven,project 选择本地的jdk,下面Create from archetype,一定要勾选,然后选择下面(本截图最后一行)的-webapp。

点next,然后对GroupId和ArtifactId,分别写上自己的项目组名和项目名。groupId 定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如你在 googlecode 上 建 立 了 一 个 名 为 myapp 的 项 目 , 那 么 groupId 就 应 该 是com.googlecode.myapp,如果你的公司是 mycom,有一个项目为 myapp,那么 groupId 就应该是 com.mycom.myapp。本书中所有的代码都基于 groupId com.juvenxu.mvnbook。artifactId 定义了当前 Maven 项目在组中唯一的 ID,我们为这个 Hello World 项目定义artifactId 为 hello-world,本书其他章节代码会被分配其他的 artifactId。而在前面的groupId 为 com.googlecode.myapp 的例子中,你可能会为不同的子项目(模块)分配artifactId,如:myapp-util、myapp-domain、myapp-web 等等。

Maven的setting文件和本地仓库地址reporitory。为了让项目在创建的时候可以快速构建,需要在Properties增加参数:archetypeCatalog=internal,这个参数的意思是插件使用内部的archetype元数据,如果不加该参数,则默认从remote中央仓库下载,这样会导致构建很慢,而且有可能构建失败,这样就只有一个pom.xml文件,其余的目录结构都不会生成了。

            

点Finish,出现以下的界面就代表完成Maven项目的创建成功。

对于最重要的pom.xml文件中

最重要的是 groupId,artifactId 和 version 三行,前面两个刚刚在上面已经介绍过了, version也很容易懂得,指的当前的版本——1.0-SNAPSHOT。SNAPSHOT 意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version 会不断更新,如升级为 1.0、1.1-SNAPSHOT、1.1、2.0 等等。

最后一个 name 元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个 POM 声明 name,以方便信息交流。

五、Jetty插件的安装与使用

根据groupId和artifactId还有version,就可以下载自己所需要的插件。因为Maven内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构

件,Maven会在需要的时候去那里下载。

然后,在右侧可以看到有Maven Project,点开里面的Plugins,里面有jetty,点开里面的jetty:run,同时也可以create 一个test,.这样以后就不用每次都点开去运行jetty了,而是可以直接点test来运行。

               

                

出现以下信息,就代表我们jetty运行成功了,就可以去运行我们的web项目了。

六、运行WEB项目

mvn jetty:run默认启动的是8080端口,tomcat通常占用这个端口,可以手动修改jetty插件的启动端口,命令如下:

                                                    mvn jetty:run -Djetty.port=9999 

另一种方法是修改pom文件,jetty插件部分代码如下:



<plugin> 
                <groupId>org.mortbay.jetty</groupId> 
                <artifactId>maven-jetty-plugin</artifactId> 
                <version>6.1.6</version> 
                <configuration> 
                    <connectors> 
                       <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
                            <port>9999</port> 
                            <maxIdleTime>60000</maxIdleTime> 
                        </connector> 
                    </connectors> 
                </configuration> 
 </plugin>
 

如果不用Tomcat 或者很少用就不用担心端口占用问题了,可以直接在地址栏,输入http://localhost:8080/index.jsp或者http://localhost:8080

这个地方和Tomcat不一样,不用在前面输入工程名,因为默认的路径直接到根目录下。所以直接输入就可访问默认页面,index.jsp页面。

至此,我们一个简单的Web项目,从下载Maven到安装Jetty插件,到得出jsp页面就算完成了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目 的相关文章

随机推荐

  • 卡尔曼滤波及其MATLAB程序

    今天写了个卡尔曼滤波的小程序 希望对有需要的同学有点帮助 卡尔曼滤波是一个很常用的滤波算法 与维纳滤波相比有很多长处 这里我们把Kalman Filter简称为KF KF的基本思想是 采用信号 噪声 状态空间模型 利用前一时刻的状态最优估计
  • 学习python笔记01

    一 python是什么 人生苦短 我用python python是一门解释型语言 边解释边运行 与编译型语言的区别是 编译型语言是先编译后运行 python语言的特点 1 优雅 2 明确 3 简单 python是一个完全面向对象语言 具有强
  • 纯java实现相片转素描

    1 实例演示图片转素描效果 首先我们来看一下具体的效果 在项目中添加依赖
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Input.GetAxis _ Unity3d

    Input GetAxis 获取轴 static function GetAxis axisName string float Description描述 Returns the value of the virtual axis iden
  • 【论文精读】时序逻辑应用之模型预测控制Model Predictive Control with Signal Temporal Logic Specifications

    前言 因为天天写代码实在是太枯燥了 所以读点其他东西来调剂一下 这样科研进度不至于停下 前面读了几篇关于时序逻辑学习的文章 今天来了解一下时序逻辑公式在控制中的应用 Raman V Donze A Maasoumy M Murray R M
  • Android Studio编译失败问题(aapt2)

    Android Studio 3 1编译时出错 org gradle api tasks TaskExecutionException Execution failed for task app mergeDebugResources at
  • 心灵鸡汤

    心灵鸡汤 比尔盖茨不想弯腰去捡100美金 浪费了1秒 时间是最宝贵 有限的时间资源最大化 如果你不够优秀 人脉是不值钱的 它不是追求来的 而是吸引来的 只有等价的交换 才能得到合理的帮助 虽然听起来很冷 但这是事实 与凤凰同飞 必是俊鸟 与
  • AESCBCUtil

    import javax crypto Cipher import javax crypto spec IvParameterSpec import javax crypto spec SecretKeySpec import org ap
  • 面试必问的 CAS ,要多了解

    前言 CAS Compare and Swap 即比较并替换 实现并发算法时常用到的一种技术 Doug lea大神在java同步器中大量使用了CAS技术 鬼斧神工的实现了多线程执行的安全性 CAS的思想很简单 三个参数 一个当前内存值V 旧
  • 结构体中数组放在最后位置的问题

    以下出自 C Programming FAQS 先看下面的代码 struct name int namelen char namestr 1 struct name makename char newname struct name ret
  • GDAL多光谱与全色图像融合简单使用

    目录 简述 C 代码 效果对比 GDAL融合效果和原始多光谱波段对比 GDAL融合效果和原始全色波段对比 ARCGIS融合效果与原始全色和多光谱对比 GDAL融合效果与ArcGIS融合效果对比 简述 最近在GDAL的代码中看见了gdalpa
  • 毕业设计e4a代码

    事件 主窗口 创建完毕 用来设置该窗口控件的属性 比如说该窗口的标题 该窗口的背景颜色 该窗口的背景图片 按键的标题设置 标签1 背景颜色 无色 标签1就是设备未使用 标签2 背景颜色 无色 标签2就是推出系统 标签1 可用 假 禁止标签使
  • STM32第二天之外部中断及系统定时器

    1 中断优先级 1 在 NVIC 有一个专门的寄存器 中断优先级寄存器 NVIC IPRx 用来配置外部中断的优先级 IPR 宽度为 8bit 原则上每个外部中断可配置的优先级为 0 255 2 数值越小 优先级越高 在 F103 中 只使
  • OpenWrt添加软件包(一)

    本文参考https wiki openwrt org zh cn doc devel packages http blog csdn net teddy99999 article details 17537545 OpenWrt是一个比较完
  • 用Python做一款简单的打字速度测试

    现在大家一定知道很多打字测试软件吧 例如金山打字通 今天 我们也自己制作一款打字速度测试软件吧 分析 1 导入库 创建打字对象 2 选取句子 输入 3 记录时间 4 打印结果 如是否有错别字 用时 1 导入库time random date
  • java代码_动态编译 Java 代码以及生成 Jar 文件

    导读 最近在看 Flink 源码的时候发现到一段实用的代码 该代码实现了 java 动态编译以及生成 jar 文件 将其进行改进后可以应用到我们的平台上 实现在平台页面上编写 java 代码语句 提交后由后台进行编译和打成 Jar 包再上传
  • linux 启动springboot项目脚本

    此脚本可以重启 启动 停止等 仅需要传参即可 bin bash 这里可替换为你自己的执行程序 其他代码无需更改 APP NAME test jar cd dirname 0 使用说明 用来提示输入参数 usage echo Usage sh
  • 【Vue3】在Vue3中使用reactive定义的响应式失效

    Vue3 在Vue3中使用reactive定义的响应式失效 文章目录 Vue3 在Vue3中使用reactive定义的响应式失效 Vue3 在Vue3中使用reactive定义的响应式失效 后面查出原因 解决办法 总结 Vue3 在Vue3
  • maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

    maven学习笔记 一 什么是maven Maven是一个项目管理工具 它包含了一个项目对象模型 Project Object Model 一组标准集合 一个项目生命周期 Project Lifecycle 一个依赖管理系统 Depende