本文主要是介绍imooc 项目管理利器 maven 课程笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://www.imooc.com/learn/443
目录结构
install 之后,其他项目就可以正常地 import 了。
-DgroupId 反写域名 +项目名
-DartifactId 模块名(用连字符)
-Dversioin 版本号
-Dpackage 反写域名+项目名+模块包名
groupId artifactId 合成一个依赖的“坐标”
仓库和镜像仓库的地址和本地仓库路径 可以在 $MAVEN_HOME/conf/settings.xml 里配置
Eclipse 中的 Maven
问题:Perhaps you are running on a JRE rather than a JDK?
解决:在 BuildPath - Add library - System JRE 选择系统的 JRE运行环境 即可成功构建
插件:maven.apache.org/plugins/index.html
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven 项目和实际项目并不是一一对应的关系,因为 Maven 体现的是模块化的概念,所以一个实际项目往往被划分成很多的模块。
snapshot alpha beta release GA 版本号的意义
http://www.blogjava.net/RomulusW/archive/2008/05/04/197985.html
https://blog.csdn.net/zmken497300/article/details/51707967/
<exclusion> 排除传递依赖
<dependenciesManagement> 管理依赖继承关系
<parent> 子模块继承
<modules> 指定模块进行编译
<scope> 依赖范围
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
开发中,如果需要使用框架,则需要将框架的 jar 包引入到项目的classpath路径中。Maven提供了三种classpath :编译,测试,运行
Servlet
JDBC
import http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies
依赖传递
山鸡-》浩南-》B哥
修改Maven Settings 文件
https://www.cnblogs.com/30go/p/7154298.html
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
如此就创建Maven项目识,就不需要手动修改BuildPath 中的 JDK版本了
exclusion 包groupId ,artifactId,不包含 version
依赖冲突
中心库
http://mvnrepository.com/tags/maven
commons-io
http://mvnrepository.com/artifact/commons-io/commons-io
山鸡-》浩南-》B哥
浩南->commons-io2.0
B哥->commons-io2.4
则 山鸡得到的是commons-io2.0,因为楠哥离山鸡更近
如,山鸡同时依赖南哥和B哥,南哥(2.0)和B哥(2.4)没有依赖关系,则哪个dependency 在前面,就用哪个版本的jar
聚合和继承
<packaging>pom</packaging>
...
<modules>
<module>../hongxing-bge</module>
<module>../hongxing-nange</module>
<module>../hongxing-shanji</module>
</modules>
运行 clean install 实现继承
由于三个人都有Junit依赖,所以可以将junit 抽取形成父依赖
新建 hongxing-parent maven 项目pom 关键如下:
<packaging>pom</packaging>
<name>hongxing-parent</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit-version>3.8.1</junit-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
“子”项目引用pom如下,新增parent标签包裹父项目的坐标,依赖列表中删除version 和 scope 标签:
<parent>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
如果不删除dependency 中的version 和 scope ,则 以子覆盖父
新建 Web 项目
一、新建 maven 模板不用之前的quickstart 而是 webapp,然后去中央仓库找到 servlet API 添加进来,如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!-- 只在编译和测试时运行 -->
<scope>provided</scope>
</dependency>
</dependencies>
二、creat floder 创建 src/main/java 和 src/test/java src/test/resources
三、检查 properties -> buildpatch -> scource 确保output folder 都是 项目/target/classes
四、检查 properties -> buildpatch -> project facets 勾选了 Dynamic Web Module
五、修改部署时的默认配置
右键项目 properties-> depolyment assembly 将 src/test 下的内容都remove掉。
五步完成即创建成功。使用package 命令将其打包并发布到指定的Web容器中,就可以在浏览器中访问了.
引入jetty
<build>
<finalName>webdemo</finalName>
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin -->
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.12.RC1</version>
</plugin>
</plugins>
</build>
Run As -> Maven Build -> jetty:run
成功运行后,访问localhost:8080即可看到 Hello World! 内容。
不想每次输入 jetty:run,打包成功后使用jetty:run来运行jetty服务, 可以修改pom plugin 的execution标签,如下:
<build>
<finalName>webdemo</finalName>
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin -->
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.11.v20180605</version>
<executions>
<execution>
<!-- 打包成功后使用jetty:run来运行jetty服务 -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意关掉之前正在运行的jetty ,否则会报端口占用的错误。
Tomcat
使用tomcat 也是,直接替换Jetty 的坐标即可
https://tomcat.apache.org/maven-plugin-2.2/
https://tomcat.apache.org/
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
or
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<build>
<finalName>webdemo</finalName>
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin
<groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId>
<version>9.4.11.v20180605</version> -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 打包成功后使用jetty:run来运行jetty服务 -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行成功 http://localhost:8080/webdemo/
课程总结
这篇关于imooc 项目管理利器 maven 课程笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!