1. 程式人生 > 實用技巧 >在ubuntu上使用v4l2loopback和ffmpeg模擬攝像頭

在ubuntu上使用v4l2loopback和ffmpeg模擬攝像頭

Maven

  1. 什麼是Maven

    Maven 在美國是一個口語化的詞語,代表專家、內行的意思。一個對 Maven 比較正式的定義是這麼說的:Maven 是一個專案管理工具,它包含了一個專案物件模型 (POMProject Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。

    試想,如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯程式碼,還能幫你自動執行單元測試,打包,生成報表,甚至能幫你部署專案,生成 Web 站點,你會心動嗎?Maven 就可以解決上面所提到的這些問題。

  2. Maven工程的執行過程

    maven 工程中不直接將 jar 包匯入到工程中,而是通過在pom.xml 檔案中新增所需 jar包的座標,這樣就很好的避免了 jar 直接引入進來,在需要用到 jar 包的時候,只要查詢pom.xml 檔案,再通過 pom.xml 檔案中的座標,到一個專門用於”存放 jar 包的倉庫”(maven 倉庫)中根據座標從而找到這些 jar 包,再把這些 jar 包拿去執行。

Maven安裝

  1. Apache-maven-3.5.2 下載地址:http://archive.apache.org/dist/maven/maven-3/

  2. 電腦上需安裝 java 環境,安裝 JDK1.7 + 版本(將JAVA_HOME/bin 配置環境變數 path )

  3. 配置 MAVEN_HOME ,變數值就是你的 maven 安裝 的路徑(bin 目錄之前一級目錄)

  4. 通過 mvn -v命令檢查 maven 是否安裝成功

Maven倉庫

  1. Maven倉庫的分類

    • 本地倉庫 :用來儲存從遠端倉庫或中央倉庫下載的外掛和 jar 包,專案使用一些外掛或 jar 包,優先從本地倉庫查詢

      • 預設本地倉庫位置在 ${user.dir}/.m2/repository,${user.dir}表示 windows 使用者目錄

    • 遠端倉庫:如果本地需要外掛或者 jar 包,本地倉庫沒有,預設去遠端倉庫下載。遠端倉庫可以在網際網路內也可以在區域網內。

    • 中央倉庫 :在 maven 軟體中內建一個遠端倉庫地址

      http://repo1.maven.org/maven2 ,它是中央倉庫,服務於整個網際網路,它是由 Maven 團隊自己維護,裡面儲存了非常全的 jar 包,它包含了世界上大部分流行的開源專案構件。

  2. 建立屬於自己的本地倉庫

    1. 在任意一個地方新建資料夾repository。

    2. 在 MAVE_HOME/conf/settings.xml 檔案中配置本地倉庫位置(maven 的安裝目錄下)

    3. 在localRepository標籤內填寫剛才建立的資料夾的路徑

  3. 全域性 setting 與使用者 setting

    1. 全域性配置:在 maven 安裝目錄下的有 conf/setting.xml 檔案,此 setting.xml 檔案用於 maven 的所有 project專案

    2. 使用者配置:預設在${user.dir} /.m2/settings.xml 目錄中

    3. maven 會先找使用者配置,如果找到則以使用者配置檔案為準,否則使用全域性配置檔案。

  4. Maven 工程的目錄結構

    • 作為一個 maven 工程,它的 src 目錄和 pom.xml 是必備的。

    • 進入 src 目錄後,我們發現它裡面的目錄結構如下:

      • src/main/java —— 存放專案的.java 檔案

      • src/main/resources —— 存放專案資原始檔,如 spring, hibernate 配置檔案

      • src/test/java —— 存放所有單元測試.java 檔案,如 JUnit 測試類

      • src/test/resources —— 測試資原始檔

      • target —— 專案輸出位置,編譯後的 class 檔案會輸出到此目錄

      • pom.xml——maven 專案核心配置檔案

      • 注意:如果是普通的 java 專案,那麼就沒有 webapp 目錄

Maven常用命令

  • compile 是 maven 工程的編譯命令,作用是將 src/main/java 下的檔案編譯為 class 檔案輸出到 target目錄下

  • test 是 maven 工程的測試命令 mvn test,會執行 src/test/java 下的單元測試類。

  • clean 是 maven 工程的清理命令,執行 clean 會刪除 target 目錄及內容。

  • package 是 maven 工程的打包命令,對於 java 工程執行 package 打成 jar 包,對於 web 工程打成 war包。

  • install 是 maven 工程的安裝命令,執行 install 將 maven 打成 jar 包或 war 包釋出到本地倉庫。從執行結果中,可以看出:當後面的命令執行時,前面的操作過程也都會自動執行

Maven指令的生命週期

  • maven 對專案構建過程分為三套相互獨立的生命週期,請注意這裡說的是“三套”,而且“相互獨立”,

  • 這三套生命週期分別是:

    • Clean Lifecycle :清理生命週期 ->在進行真正的構建之前進行一些清理工作。

    • Default Lifecycle:預設生命週期 -> 構建的核心部分,編譯,測試,打包,部署等等。

    • Site Lifecycle :站點生命週期 ->生成專案報告,站點,釋出站點。

Maven的概念模型

  • 專案物件模型 (Project Object Model)

    • 一個 maven 工程都有一個 pom.xml 檔案,通過 pom.xml 檔案定義專案的座標、專案依賴、專案資訊、外掛目標等。

  • 依賴管理系統(Dependency Management System)

    • 通過 maven 的依賴管理對專案所依賴的 jar 包進行統一管理。

  • 一個專案生命週期(Project Lifecycle)

    • 使用 maven 完成專案的構建,專案構建包括:清理、編譯、測試、報告、打包、部署等過程

  • 外掛(plugin)目標(goal)

    • maven 管理專案生命週期過程都是基於外掛完成的

idea 開發 maven 專案

  1. 開啟File的Settings 配置 maven

  2. 在配置maven中的runner裡 的VM option中新增-DarchestypeCatalog=internal 在不聯網的情況下可以使用骨架建立maven工程

總結

  • 座標定義

在 pom.xml 中定義座標,內容包括:groupId、artifactId、version,詳細內容如下:
<!--專案名稱,定義為組織名+專案名,類似包名-->
<groupId>cn.itcast.maven</groupId>
<!-- 模組名稱 -->
<artifactId>maven-first</artifactId>
<!-- 當前專案版本號,snapshot 為快照版本即非正式版本,release 為正式釋出版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包型別
jar:執行 package 會打成 jar 包
war:執行 package 會打成 war 包
pom :用於 maven 工程的繼承,通常父工程設定為 pom
  • pom 基本配置

pom.xml 是 Maven 專案的核心配置檔案,位於每個工程的根目錄,基本配置如下:
<project > :檔案的根節點 .
<modelversion > : pom.xml 使用的物件模型版本
<groupId > :專案名稱,一般寫專案的域名
<artifactId > :模組名稱,子專案名或模組名稱
<version > :產品的版本號 .
<packaging > :打包型別,一般有 jar、war、pom 等
<name > :專案的顯示名,常用於 Maven 生成的文件。
<description > :專案描述,常用於 Maven 生成的文件
<dependencies> :專案依賴構件配置,配置專案依賴構件的座標
<build> :專案構建配置,配置編譯、執行外掛等。
  • 依賴範圍

    A 依賴 B,需要在 A 的 pom.xml 檔案中新增 B 的座標,新增座標時需要指定依賴範圍,依賴範圍包括:

compile:編譯範圍,指 A 在編譯時依賴 B,此範圍為預設依賴範圍。編譯範圍的依賴會用在編譯、測試、執行,由於執行時需要所以編譯範圍的依賴會被打包。 
provided:provided 依賴只有在當 JDK 或者一個容器已提供該依賴之後才使用, provided 依賴在編譯和測試時需要,在執行時不需要,比如:servlet api 被 tomcat 容器提供。
runtime:runtime 依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如:jdbc的驅動包。由於執行時需要所以runtime 範圍的依賴會被打包。
test:test 範圍依賴 在編譯和執行時都不需要,它們只有在測試編譯和測試執行階段可用,比如:junit。由於執行時不需要所以 test範圍依賴不會被打包。
system:system 範圍依賴與 provided 類似,但是你必須顯式的提供一個對於本地系統中 JAR檔案的路徑,需要指定systemPath 磁碟路徑,system依賴不推薦使用。

在 maven-web 工程中測試各各 scop。
測試總結:
 預設引入 的 jar 包 ------- compile 【預設範圍 可以不寫】(編譯、測試、執行 都有效 )
 servlet-api 、jsp-api ------- provided (編譯、測試 有效, 執行時無效 防止和 tomcat 下 jar 衝突)
 jdbc 驅動 jar 包 ---- runtime (測試、執行 有效 )
 junit ----- test (測試有效)
依賴範圍由強到弱的順序是:compile>provided>runtime>test