日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gradle入门:依赖管理

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gradle入门:依赖管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

即使不是沒有可能,創建沒有任何外部依賴關系的現實應用程序也是一項挑戰。 這就是為什么依賴性管理是每個軟件項目中至關重要的部分的原因。

這篇博客文章描述了我們如何使用Gradle管理項目的依賴關系。 我們將學習配置已使用的存儲庫和所需的依賴項。 我們還將通過實現一個簡單的示例應用程序將此理論應用于實踐。

讓我們開始吧。

補充閱讀:

  • Gradle入門:簡介可幫助您安裝Gradle,描述Gradle構建的基本概念,并描述如何使用Gradle插件向構建中添加功能。
  • Gradle入門:我們的第一個Java項目描述了如何使用Gradle創建Java項目并將應用程序打包到可執行jar文件中。

儲存庫管理簡介

存儲庫本質上是依賴項容器,每個項目可以使用零個或多個存儲庫。

Gradle支持以下存儲庫格式:

  • 常春藤倉庫
  • Maven倉庫
  • 平面目錄存儲庫

讓我們了解如何在構建中配置每種存儲庫類型。

將常春藤存儲庫添加到我們的構建中

我們可以使用它的url地址或它在本地文件系統中的位置將Ivy存儲庫添加到我們的構建中。

如果要使用其常春藤地址添加常春藤存儲庫,則必須將以下代碼片段添加到build.gradle文件中:

repositories {ivy {url "http://ivy.petrikainulainen.net/repo"} }

如果要使用文件系統中的位置添加常春藤存儲庫,則必須將以下代碼段添加到build.gradle文件中:

repositories {ivy { url "../ivy-repo"} }

如果您想獲得有關配置Ivy存儲庫的更多信息,則應檢查以下資源:

  • Gradle用戶指南的第50.6.6節Ivy存儲庫
  • IvyArtifactRepository的API文檔

讓我們繼續前進,找出如何將Maven存儲庫添加到我們的構建中。

將Maven存儲庫添加到我們的構建中

我們可以使用其URL地址或在本地文件系統中的位置將Maven存儲庫添加到我們的構建中。

如果要使用其URL添加Maven存儲庫,則必須將以下代碼段添加到build.gradle文件中:

repositories {maven {url "http://maven.petrikainulainen.net/repo"} }

如果要通過使用文件系統中的Maven存儲庫來添加Maven存儲庫,則必須將以下代碼段添加到build.gradle文件中:

repositories {maven { url "../maven-repo"} }

將Maven存儲庫添加到構建中時,Gradle可以使用三個“別名”。 這些別名是:

  • mavenCentral()別名意味著從中央Maven 2存儲庫中獲取依賴項。
  • jcenter()別名表示從Bintray的JCenter Maven存儲庫中獲取依賴項。
  • mavenLocal()別名意味著從本地Maven存儲庫中獲取依賴項。

如果要在構建中添加中央Maven 2存儲庫,則必須將以下代碼段添加到build.gradle文件中:

repositories {mavenCentral() }

如果要獲取有關配置Maven存儲庫的更多信息,則應查閱Gradle用戶指南的第50.6.4節“ Maven存儲庫” 。

讓我們繼續前進,了解如何向構建中添加平面目錄存儲庫。

將平面目錄存儲庫添加到我們的版本中

如果要使用平面目錄存儲庫,則必須將以下代碼片段添加到build.gradle文件中:

repositories {flatDir {dirs 'lib'} }

這意味著從lib目錄中搜索依賴項。 另外,如果需要,可以通過將以下代碼段添加到build.gradle文件中來使用多個目錄:

repositories {flatDir {dirs 'libA', 'libB'} }

如果要獲取有關平面目錄存儲庫的更多信息,則應檢查以下資源:

  • Gradle用戶指南的第50.6.5節平面目錄存儲庫
  • Flat Dir Repository發布到gradle用戶郵件列表

讓我們繼續前進,了解如何使用Gradle管理項目的依賴關系。

依賴管理簡介

配置項目的存儲庫后,我們可以聲明其依賴項。 如果我們要聲明一個新的依賴關系,我們必須執行以下步驟:

  • 指定依賴項的配置。
  • 聲明所需的依賴項。
  • 讓我們仔細看看這些步驟。

    將依賴項分組到配置中

    在Gradle中,依賴項分為一組命名的依賴項。 這些組稱為配置,我們使用它們來聲明項目的外部依賴關系。

    Java插件指定了幾種依賴項配置 ,下面對此進行了描述:

    • 當我們編譯項目的源代碼時,需要將添加到編譯配置的依賴項。
    • 運行時配置包含運行時所需的依賴項。 此配置包含添加到編譯配置的依賴項。
    • testCompile配置包含編譯項目測試所需的依賴項。 此配置包含我們項目的已編譯類以及添加到編譯配置中的依賴項。
    • testRuntime配置包含運行我們的測試時所需的依賴項。 此配置包含添加到compile , runtime和testCompile配置的依賴項。
    • 檔案配置包含由我們的項目產生的工件(例如Jar文件)。
    • 默認配置組包含運行時所需的依賴項。

    讓我們繼續前進,找出如何聲明Gradle項目的依賴項。

    聲明項目的依存關系

    最常見的依賴項稱為外部依賴項,可從外部存儲庫找到。 通過使用以下屬性來標識外部依賴項:

    • group屬性標識依賴項的組(Maven用戶將此屬性稱為groupId )。
    • name屬性標識依賴項的名稱(Maven用戶將此屬性稱為artifactId )。
    • version屬性指定外部依賴項的版本(Maven用戶將此屬性稱為version )。

    使用Maven存儲庫時,這些屬性是必需的。 如果使用其他存儲庫,則某些屬性可能是可選的。

    例如,如果使用平面目錄存儲庫,則可能僅需要指定name和version 。

    假設我們必須聲明以下依賴關系:

    • 依賴項的組為“ foo”。
    • 依賴項的名稱為“ foo”。
    • 依賴項的版本為0.1。
    • 編譯我們的項目時需要依賴項。

    我們可以通過將以下代碼片段添加到build.gradle文件中來聲明此依賴性:

    dependencies {compile group: 'foo', name: 'foo', version: '0.1' }

    我們還可以使用遵循以下語法的快捷方式形式聲明項目的依賴項: [group]:[name]:[version] 。 如果要使用快捷方式表單,則必須將以下代碼片段添加到build.gradle文件中:

    dependencies {compile 'foo:foo:0.1' }

    我們還可以將多個依賴項添加到同一配置中。 如果要在聲明依賴項時使用“常規”語法,則必須將以下代碼片段添加到build.gradle文件中:

    dependencies {compile ([group: 'foo', name: 'foo', version: '0.1'],[group: 'bar', name: 'bar', version: '0.1']) }

    另一方面,如果我們要使用快捷方式表單, build.gradle文件的相關部分如下所示:

    dependencies {compile 'foo:foo:0.1', 'bar:bar:0.1' }

    自然可以聲明屬于不同配置的依賴項。 例如,如果我們要聲明屬于compile和testCompile配置的依賴項,則必須將以下代碼片段添加到build.gradle文件中:

    dependencies {compile group: 'foo', name: 'foo', version: '0.1'testCompile group: 'test', name: 'test', version: '0.1' }

    同樣,可以使用快捷方式表格。 如果要使用快捷方式表單聲明相同的依賴項,則build.gradle文件的相關部分如下所示:

    dependencies {compile 'foo:foo:0.1'testCompile 'test:test:0.1' }

    閱讀第50.4節“如何聲明Gradle用戶指南”中的依賴項,可以獲得有關聲明依賴項的更多信息。

    現在,我們已經學習了依賴管理的基礎知識。 讓我們繼續并實現示例應用程序。

    創建示例應用程序

    我們的示例應用程序的要求在以下內容中進行了描述:

    • 示例應用程序的構建腳本必須使用Maven中央存儲庫。
    • 示例應用程序必須使用Log4j將接收到的消息寫入日志。
    • 示例應用程序必須包含單元測試,以確保返回正確的消息。 這些單元測試必須使用JUnit編寫。
    • 我們的構建腳本必須創建一個可執行的jar文件。

    讓我們找出如何滿足這些要求。

    配置我們的版本庫

    示例應用程序的要求之一是其構建腳本必須使用Maven中央存儲庫。 在配置好構建腳本以使用Maven中央存儲庫之后,其源代碼如下所示(相關部分已突出顯示):

    apply plugin: 'java'repositories {mavenCentral() }jar {manifest {attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld'} }

    讓我們繼續并聲明示例應用程序的依賴項。

    聲明示例應用程序的依賴關系

    我們必須在build.gradle文件中聲明兩個依賴項 :

  • Log4j(版本1.2.17)用于將接收到的消息寫入日志。
  • JUnit(版本4.11)用于為示例應用程序編寫單元測試。
  • 聲明這些依賴關系后, build.gradle文件如下所示(相關部分突出顯示):

    apply plugin: 'java'repositories {mavenCentral() }dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11' }jar {manifest {attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld'} }

    讓我們繼續寫一些代碼。

    編寫代碼

    為了滿足示例應用程序的要求,“我們必須對其進行過度設計”。 我們可以按照以下步驟創建示例應用程序:

  • 創建一個MessageService類,該類返回字符串“ Hello World!”。 調用其getMessage()方法時。
  • 創建這確保了MessageServiceTest類的MessageService類返回字符串“世界,你好!”的getMessage()方法。
  • 創建我們的應用程序的主類,該類從MessageService對象獲取消息,并使用Log4j將消息寫入日志。
  • 配置Log4j。
  • 讓我們一步一步地完成這些步驟。

    首先 ,我們必須在src / main / java / net / petrikainulainen / gradle目錄中創建一個MessageService類并實現它。 完成此操作后,其源代碼如下所示:

    package net.petrikainulainen.gradle;public class MessageService {public String getMessage() {return "Hello World!";} }

    其次 ,我們在src / main / test / net / petrikainulainen / gradle目錄中創建了一個MessageServiceTest ,并將單元測試寫入了MessageService類的getMessage()方法。 MessageServiceTest類的源代碼如下所示:

    package net.petrikainulainen.gradle;import org.junit.Before; import org.junit.Test;import static org.junit.Assert.assertEquals;public class MessageServiceTest {private MessageService messageService;@Beforepublic void setUp() {messageService = new MessageService();}@Testpublic void getMessage_ShouldReturnMessage() {assertEquals("Hello World!", messageService.getMessage());} }

    第三 ,我們在src / main / java / net / petrikainulainen / gradle目錄中創建了一個HelloWorld類。 此類是我們應用程序的主要類別。 它從MessageService對象獲取消息,然后使用Log4j將其寫入日志。 HelloWorld類的源代碼如下所示:

    package net.petrikainulainen.gradle;import org.apache.log4j.Logger;public class HelloWorld {private static final Logger LOGGER = Logger.getLogger(HelloWorld.class);public static void main(String[] args) {MessageService messageService = new MessageService();String message = messageService.getMessage();LOGGER.info("Received message: " + message);} }

    第四 ,我們必須使用從src / main / resources目錄中找到的log4j.properties來配置Log4j。 log4j.properties文件如下所示:

    log4j.appender.Stdout=org.apache.log4j.ConsoleAppender log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\nlog4j.rootLogger=DEBUG,Stdout

    這就對了。 讓我們找出如何運行示例應用程序的測試。

    運行單元測試

    我們可以使用以下命令運行單元測試:

    gradle test

    測試通過后,我們將看到以下輸出:

    > gradle test :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :testBUILD SUCCESSFULTotal time: 4.678 secs

    但是,如果我們的單元測試失敗,則會看到以下輸出(突出顯示了有趣的部分):

    > gradle test :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :testnet.petrikainulainen.gradle.MessageServiceTest > getMessage_ShouldReturnMessageFAILEDorg.junit.ComparisonFailure at MessageServiceTest.java:221 test completed, 1 failed :test FAILEDFAILURE: Build failed with an exception.* What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///Users/loke/Projects/Java/Blog/gradle-examples/dependency-management/build/reports/tests/index.html* Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.BUILD FAILEDTotal time: 4.461 secs

    如我們所見,如果我們的單元測試失敗,則描述:

    • 哪些測試失敗。
    • 運行了多少測試以及失敗了多少測試。
    • 測試報告的位置,該報告提供有關失敗(和通過)測試的其他信息。

    當我們運行單元測試時,Gradle將測試報告創建到以下目錄:

    • build / test-results目錄包含每個測試運行的原始數據。
    • build / reports / tests目錄包含一個HTML報告,該報告描述了我們的測試結果。

    HTML測試報告是非常有用的工具,因為它描述了測試失敗的原因 。 例如,如果我們的單元測試期望MessageService類的getMessage()方法返回字符串“ Hello Worl1d!”,則該測試用例HTML測試報告將如下所示:

    讓我們繼續前進,了解如何打包和運行示例應用程序。

    打包并運行我們的示例應用程序

    我們可以使用以下命令之一打包應用程序:em> gradle assembly或gradle build 。 這兩個命令都會在build / libs目錄中創建dependency-management.jar文件。

    通過使用命令java -jardependency-management.jar運行示例應用程序時,我們看到以下輸出:

    > java -jar dependency-management.jarException in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Loggerat net.petrikainulainen.gradle.HelloWorld.<clinit>(HelloWorld.java:10) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Loggerat java.net.URLClassLoader$1.run(URLClassLoader.java:372)at java.net.URLClassLoader$1.run(URLClassLoader.java:361)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:360)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 1 more

    發生此異常的原因是,當我們運行應用程序時,沒有從類路徑中找到Log4j依賴項。

    解決此問題的最簡單方法是創建一個所謂的“胖” jar文件。 這意味著我們會將所需的依賴項打包到創建的jar文件中。

    在按照Gradle Cookbook中的說明進行操作之后,我們的構建腳本如下所示(相關部分已突出顯示):

    apply plugin: 'java'repositories {mavenCentral() }dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11' }jar {from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }manifest {attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld'} }

    現在,我們可以運行示例應用程序(打包后),如我們所見,一切都正常運行:

    > java -jar dependency-management.jar INFO - HelloWorld - Received message: Hello World!

    今天就這些。 讓我們總結一下我們從此博客文章中學到的知識。

    摘要

    這篇博客文章教會了我們四件事:

    • 我們學習了如何配置構建所使用的存儲庫。
    • 我們學習了如何聲明所需的依賴關系并將這些依賴關系分組為配置。
    • 我們了解到,Gradle在運行測試時會創建一個HTML測試報告。
    • 我們了解了如何創建一個所謂的“胖” jar文件。

    如果您想玩這個博客文章的示例應用程序,可以從Github獲得它 。

    翻譯自: https://www.javacodegeeks.com/2014/07/getting-started-with-gradle-dependency-management.html

    總結

    以上是生活随笔為你收集整理的Gradle入门:依赖管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。