angular2是做網(wǎng)站的還是手機(jī)的seo排名的公司
文章目錄
- Maven
- 安裝Maven
- Maven的工作流程
- 配置Maven
- Maven的使用
- module和project的關(guān)系
- 如何用Maven導(dǎo)包
- 如何用Maven進(jìn)行項(xiàng)目構(gòu)建
- 指令介紹
- clean指令
- compile指令
- package指令
- install指令
- Maven的依賴管理
- 如何導(dǎo)包
- scope作用域
- 依賴傳遞
- 依賴沖突
- 使用Maven開(kāi)發(fā)項(xiàng)目
- Junit
- 如何使用Junit
Maven
- Maven是一個(gè)項(xiàng)目管理工具,主要有兩個(gè)功能:
- 項(xiàng)目構(gòu)建
- 指可以幫助我們編譯項(xiàng)目、打包項(xiàng)目(可以幫助我們把自己的項(xiàng)目打包成一個(gè)
.jar
文件)、安裝項(xiàng)目、部署項(xiàng)目
- 指可以幫助我們編譯項(xiàng)目、打包項(xiàng)目(可以幫助我們把自己的項(xiàng)目打包成一個(gè)
- 依賴管理
- 當(dāng)我們的項(xiàng)目變得復(fù)雜之后,項(xiàng)目中的依賴越來(lái)越多,管理起來(lái)也越來(lái)越復(fù)雜,Maven可以幫助我們?nèi)ス芾磉@些依賴。
- 項(xiàng)目構(gòu)建
安裝Maven
版本說(shuō)明:
- JDK:
1.8
- Maven:https://maven.apache.org/download.cgi(不要下最新版本)
解壓:
- 證明安裝成功
配置環(huán)境變量:
- 打開(kāi)高級(jí)系統(tǒng)設(shè)置,配置系統(tǒng)變量
- 配置環(huán)境變量
最后在cmd中輸入mvn -v,查看當(dāng)前版本
Maven的工作流程
傳統(tǒng)寫代碼的問(wèn)題:
jar
包反復(fù)存儲(chǔ),占用空間- 手動(dòng)管理,容易混亂
Maven的工作流程圖:
- 本地倉(cāng)庫(kù):其實(shí)就是本地存放Jar包的一個(gè)路徑,統(tǒng)一的集中式的去管理本地的所有jar包
- 中央倉(cāng)庫(kù):中央倉(cāng)庫(kù)其實(shí)就是Maven 提供的一個(gè)倉(cāng)庫(kù),里面收錄了世界上所有的開(kāi)源的jar包,但是在國(guó)外,網(wǎng)速慢。
- 鏡像倉(cāng)庫(kù):阿里等公司會(huì)去定期同步中央倉(cāng)庫(kù),把中央倉(cāng)庫(kù)的內(nèi)容同步過(guò)來(lái)。這樣我們后續(xù)在下載jar包的時(shí)候,就可以讓他指定去鏡像倉(cāng)庫(kù)下載,這樣下載的速度就會(huì)比較快。
配置Maven
- 配置settings.xml
- 在
conf
文件里 - 配置本地倉(cāng)庫(kù)的路徑
- 配置鏡像倉(cāng)庫(kù)
- 配置JDK的編譯版本
- 在
源碼:
<settings>...<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors>...</settings>-------------------------------------------------------------------------------------<settings>...<profiles><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></profiles>...
</settings>
- 配置idea
- 在Settings中搜索Maven
- Other Settings —> Settings for New Projects —> Maven
- 在Settings中搜索Maven
Maven的使用
Maven工程的要求:
-
在項(xiàng)目的根路徑下,有一個(gè)
pom.xml
文件 -
工程目錄是如下的結(jié)構(gòu):
-
ProjectName
- src(src里面不直接寫包)
- main
- java(寫代碼的地方,指源代碼的路徑)
- resources(配置文件地方,指配置文件的路徑)
- test
- java(單元測(cè)試代碼,指測(cè)試類的存放路徑)
- resources(單元測(cè)試的配置文件,指測(cè)試類需要用到的文件)
- main
- src(src里面不直接寫包)
-
pom.xml(在項(xiàng)目的根目錄下)
eg:
怎么把一個(gè)項(xiàng)目轉(zhuǎn)換成maven項(xiàng)目:
- 在
src
里面建幾個(gè)包src/main/java
- mark as sources
src/main/resources
- mark as resources
src/test/java
src/test/resources
- 創(chuàng)建一個(gè)
pom.xml
- 對(duì)著
pom.xml
點(diǎn)擊add as maven project
怎么通過(guò)idea創(chuàng)建一個(gè)Maven項(xiàng)目:
- GroupId:指公司名、組織名
- eg:
com.coo1heisenberg
- eg:
- ArtifactId:項(xiàng)目名
- eg:
test_maven
- eg:
module和project的關(guān)系
-
project
一個(gè)項(xiàng)目是IDEA開(kāi)發(fā)工作的頂級(jí)組織單位。在其完成的形式中,一個(gè)項(xiàng)目可能代表一個(gè)完整的軟件解決方案
項(xiàng)目是以下內(nèi)容的集合:- 工作成果:源代碼、腳本、配置文件、文檔、包等。
- 用于開(kāi)發(fā)、編譯、運(yùn)行和測(cè)試代碼的SDK和庫(kù)。
- 在項(xiàng)目上下文中表示你的工作偏好設(shè)置
- 一個(gè)項(xiàng)目有一個(gè)或者多個(gè)模塊作為其部件
-
module
- 模塊是項(xiàng)目的一部分,你可以獨(dú)立的編譯、運(yùn)行、測(cè)試和調(diào)試。
- 模塊是一種在維護(hù)公共項(xiàng)目配置的同事降低大型項(xiàng)目復(fù)雜性的方法。
- 模塊可以重復(fù)使用:如果需要,可以再多個(gè)項(xiàng)目中包含一個(gè)模塊。
如何用Maven導(dǎo)包
- 打開(kāi)https://mvnrepository.com/。搜索要用的包,找到指定的版本
- 拷貝坐標(biāo)
groupId
、artifactId
、version
叫做坐標(biāo),可以唯一確定一個(gè)包
- 只需要在
pom.xml
文件中聲明jar
包的坐標(biāo)就可以了,添加了之后點(diǎn)擊import changes
eg:
如何用Maven進(jìn)行項(xiàng)目構(gòu)建
指令介紹
項(xiàng)目構(gòu)建其實(shí)就是 Maven可以幫助我們?nèi)z查項(xiàng)目,編譯項(xiàng)目,測(cè)試項(xiàng)目,打包項(xiàng)目,安裝項(xiàng)目,部署項(xiàng)目
clean指令
Maven指令的執(zhí)行依賴于一些jar
包
- 方式一:通過(guò)
cmd
執(zhí)行
- 方式二:通過(guò)idea自帶的命令行執(zhí)行
- 得以管理員身份打開(kāi)idea,否則識(shí)別不出
mvn
命令
- 得以管理員身份打開(kāi)idea,否則識(shí)別不出
- 方式三:直接使用maven的可視化插件(常用)
compile指令
- compile是編譯的意思,可以幫助我們生成一個(gè)
target文件夾
- 以后,只能在java文件夾中寫代碼,在resources文件夾里面,寫配置文件
- 在
src/main/java
中的代碼,會(huì)編譯到target/classes
里面 - 在
src/main/java
中的配置文件、其他文件,不會(huì)進(jìn)入到target/classes
里面 - 在
src/main/resources
中的代碼,會(huì)拷貝到target/classes
里面
- 在
test
文件是運(yùn)行單元測(cè)試的,只會(huì)運(yùn)行test
文件里面java
的單元測(cè)試- 先引入
Maven
中的Junit
Assert.assertEquals()
:在單元測(cè)試?yán)锩?#xff0c;使用Assert
斷言幫我們完成自動(dòng)化的檢驗(yàn)工作
- 先引入
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
package指令
package可以幫助我們把項(xiàng)目打包
- 打包的名字:
artifactId-version.jar
(是artifactId
加上文件的版本) - 打包的格式:
-
jar
- 默認(rèn)的打包格式
-
war
- 需要指定
- 指定的格式為:
-
<!-- 指定打包的格式,默認(rèn)為jar ,可以配置為 war 和 pom -->
<packaging>jar</packaging>
install指令
- install命令可以幫助我們把package生成的jar包復(fù)制到本地倉(cāng)庫(kù)中
- 需要掌握根據(jù)
groupId
、artifactId
、version
找本地的jar
eg:
Maven的依賴管理
如何導(dǎo)包
按照上面說(shuō)到的三步流程執(zhí)行即可
scope作用域
每個(gè)依賴包都有自己作用范圍
<scope>XXX</scope>
eg:
- test
- 僅僅在測(cè)試包(
src/test/java
)路徑下有效,在src/main/java
路徑下失效。
- 僅僅在測(cè)試包(
- provided
- 在編譯的時(shí)候生效,在運(yùn)行的時(shí)候失效
- runtime
- 在編譯的時(shí)候失效,在運(yùn)行的時(shí)候生效
- 最常見(jiàn)的是:數(shù)據(jù)庫(kù)的驅(qū)動(dòng)包
- 設(shè)計(jì)原因:就是防止寫代碼的時(shí)候,用了MySQL特有的類,切數(shù)據(jù)庫(kù)的時(shí)候不好操作
- compile
- 默認(rèn)的作用域
- 在編譯和運(yùn)行的時(shí)候都生效
依賴傳遞
- 指依賴具有傳遞性
- eg:引入了
commons-dbcp
,而commons-dbcp
又引入了commons-pool
依賴沖突
- 當(dāng)在同一個(gè)項(xiàng)目中,導(dǎo)入同一個(gè)依賴的不同的版本,就會(huì)有沖突的問(wèn)題。
- 如何解決依賴沖突
- 聲明優(yōu)先原則
- 是指這同一個(gè)項(xiàng)目的不同的版本的jar包,聲明優(yōu)先僅僅指的是第二級(jí)后面的依賴,誰(shuí)先在
pom.xml
中聲明,以誰(shuí)為準(zhǔn) - 如果在
pom.xml
里,同時(shí)依賴了兩個(gè)版本。是以最后一個(gè)指定的為準(zhǔn)
- 是指這同一個(gè)項(xiàng)目的不同的版本的jar包,聲明優(yōu)先僅僅指的是第二級(jí)后面的依賴,誰(shuí)先在
- 就近原則
- 在進(jìn)行依賴傳遞的時(shí)候,誰(shuí)傳遞的次數(shù)比較少,以誰(shuí)為準(zhǔn)
- 就近原則的優(yōu)先級(jí)高于聲明優(yōu)先原則
- 手動(dòng)排除
- 手動(dòng)去排除傳遞過(guò)來(lái)的依賴
- 聲明優(yōu)先原則
eg:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.22</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.13</version>
</dependency>其中:
spring-context依賴了spring-beans(5.3.22) 優(yōu)先!!!
spring-jdbc依賴了spring-beans(5.3.13)--------------------------------------------------<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.13</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.22</version>
</dependency>(優(yōu)先!!!)--------------------------------------------------<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.4</version><!-- 手動(dòng)排除 --><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions></dependency>
- 提取常量
- 這個(gè)是一個(gè)避免依賴沖突的方法。是后面工作中主要推薦的做法。
- 常量名字不要隨便取
eg:
<properties><!--1. 提取了常量之后,可以避免依賴沖突的問(wèn)題2. 提取了常量之后,可以方便我們后期管理這些依賴(查看版本,更換版本)--><spring.version>5.3.3</spring.version><mysql.version>5.1.47</mysql.version><druid.version>1.2.6</druid.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency></dependencies>
使用Maven開(kāi)發(fā)項(xiàng)目
路徑問(wèn)題的建議:
- 不要用絕對(duì)路徑
- 最好使用類加載器的方式去讀文件
切換成Maven之后,開(kāi)發(fā)模式的變化:
- 之前需要手動(dòng)下
jar
包,拷貝,添加到庫(kù)文件;現(xiàn)在只用引入坐標(biāo) - 之前讀配置文件,使用
new FileInputStream()
;現(xiàn)在讀配置文件,需要用classLoader
,配置文件的位置需要在src/main/resource
eg:
以連接池中的druid
舉例:
public class druidDemo {public static void main(String[] args) throws Exception {testNormal();}private static void testNormal() throws Exception {Properties properties = new Properties();// 1. 絕對(duì)路徑不要使用// properties.load(new FileInputStream("druid.properties"));ClassLoader classLoader = druidDemo.class.getClassLoader();// 現(xiàn)在配置文件 需要用classLoader拿// 通過(guò)類加載器拿文件,會(huì)通過(guò)target/classes里面拿URL resource = classLoader.getResource("druid.properties");properties.load(new FileInputStream(resource.getPath()));// 或者// properties.load(classLoader.getResourceAsStream("druid.properties"));DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);Connection connection = dataSource.getConnection();Statement statement = connection.createStatement();boolean execute = statement.execute("insert into t_staff(name) values ('zs')");System.out.println(execute);}
}
<?xml version="1.0" encoding="UTF-8"?>
<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><parent><groupId>com.coo1heisenberg</groupId><artifactId>test_maven</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>module1</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><druid.version>1.2.6</druid.version></properties><dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version><scope>runtime</scope></dependency></dependencies></project>
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?
characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username=root
password=123456
Junit
Junit是一個(gè)被廣泛使用的測(cè)試工具,可以幫助我們運(yùn)行我們指定的方法
如何使用Junit
- 導(dǎo)包
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>
-
使用
@Test
@After
- 修飾的方法會(huì)在測(cè)試方法運(yùn)行之后執(zhí)行
- 在每一次測(cè)試方法的前后都會(huì)運(yùn)行
- 一般用來(lái)準(zhǔn)備數(shù)據(jù)
@Before
- 修飾的方法會(huì)在測(cè)試方法運(yùn)行之前執(zhí)行
- 在每一次測(cè)試方法的前后都會(huì)運(yùn)行
- 一般用來(lái)銷毀數(shù)據(jù)
@BeforeClass
@AfterClass
-
使用的注意事項(xiàng):
@BeforeClass
和@AfterClass
修飾的方法必須是靜態(tài)的@Test
注解修飾的方法必須是public、必須是void、必須沒(méi)有參數(shù)- 測(cè)試類必須在
src/test/java
路徑下 - 測(cè)試類的命名必須叫做
XxxTest
- 測(cè)試方法(@Test注解修飾的方法)的命名必須叫做
testXxx
();
-
使用斷言語(yǔ)句,來(lái)完成結(jié)果的確認(rèn)
@Test
public void test1() {// 在單元測(cè)試?yán)锩?#xff0c;使用Assert 斷言幫我們完成自動(dòng)化的檢驗(yàn)工作。Assert.assertEquals(new Integer(3), max);
}