ערכות מקור Gradle

1. סקירה כללית

ערכות המקור נותנות לנו דרך עוצמתית לבניית קוד המקור בפרויקטים של Gradle.

במדריך מהיר זה, נראה כיצד להשתמש בהם.

2. ערכות מקור ברירת מחדל

לפני שנקפוץ לברירות המחדל, נסביר תחילה מהן ערכות מקור. כשמו כן הוא, ערכות המקור מייצגות קיבוץ הגיוני של קבצי מקור.

נסקור את התצורה של פרויקטים של Java, אך המושגים חלים גם על סוגי פרויקטים אחרים של Gradle.

2.1. פריסת ברירת מחדל לפרויקט

נתחיל במבנה פרויקט פשוט:

ערכות מקור ├── src │ └── ראשי │ ├── java │ │ ├── SourceSetsMain.java │ │ └── SourceSetsObject.java │ └── test │ └── SourceSetsTest.java build── build. דרגה 

עכשיו בואו נסתכל על ה- build.gradle:

החל תוסף: "java" description = "מקור קובע דוגמה" test {testLogging {events "עבר", "דילג", "נכשל"}} תלות {יישום ('org.apache.httpcomponents: httpclient: 4.5.12') testImplementation ('junit: junit: 4.12')}

תוסף Java מניח src / main / java ו src / test / java כספריות ברירת המחדל של המקור.

בואו נעשה מלאכת שירות פשוטה:

משימת printSourceSetInformation () {doLast {sourceSets.each {srcSet -> println "[" + srcSet.name + "]" הדפס "-> ספריות המקור:" + srcSet.allJava.srcDirs + "\ n" הדפס "-> פלט ספריות: "+ srcSet.output.classesDirs.files +" \ n "println" "}}

אנו מדפיסים כאן רק כמה מאפייני סט מקורות. אנחנו תמיד יכולים לבדוק את JavaDoc המלא למידע נוסף.

בואו ננהל אותו ונראה מה נקבל:

$ ./gradlew printSourceSetInformation> משימה: ערכות מקור: printSourceSetInformation [main] -> ספריות המקור: [... / source-sets / src / main / java] -> ספריות הפלט: [... / source- סטים / build / מחלקות / java / main] [test] -> ספריות מקור: [... / source-sets / src / test / java] -> ספריות פלט: [... / source-sets / build / שיעורים / ג'אווה / מבחן] 

הודעה יש לנו שתי ערכות מקור ברירת מחדל: רָאשִׁי ו מִבְחָן.

2.2. תצורות ברירת מחדל

תוסף Java יוצר אוטומטית כמה תצורות ברירת מחדל עבור Gradle.

הם פועלים על פי אמנת שמות מיוחדת: .

אנו משתמשים בהם כדי להכריז על התלות ב- build.gradle:

תלות {יישום ('org.apache.httpcomponents: httpclient: 4.5.12') testImplementation ('junit: junit: 4.12')}

שימו לב שאנחנו מציינים יישום במקום mainImplementation. זהו חריג למוסכמת השמות.

כברירת מחדל, test יישום התצורה מתארכת יישום ויורש את כל התלות והתפוקות שלו.

בואו נשפר את משימת העוזר שלנו ונראה על מה מדובר:

משימת printSourceSetInformation () {doLast {sourceSets.each {srcSet -> println "[" + srcSet.name + "]" הדפס "-> ספריות המקור:" + srcSet.allJava.srcDirs + "\ n" הדפס "-> פלט ספריות: "+ srcSet.output.classesDirs.files +" \ n "הדפס" -> הידר מסלול: \ n "srcSet.compileClasspath.files.each {הדפס" "+ it.path +" \ n "} println" "} }}

בואו נסתכל על הפלט:

[ראשי] // אותה פלט כמו קודם -> הידר מסלול מחלקה: ... / httpclient-4.5.12.jar ... / httpcore-4.4.13.jar ... / commons-logging-1.2.jar .. ./commons-codec-1.11.jar [מבחן] // אותה פלט כמו קודם -> הידור מסלול כיתות: ... / ערכות מקור / בנה / מחלקות / ג'אווה / ראשי ... / ערכות מקור / בנה / משאבים / main ... / httpclient-4.5.12.jar ... / junit-4.12.jar ... / httpcore-4.4.13.jar ... / commons-logging-1.2.jar ... / commons- codec-1.11.jar ... / hamcrest-core-1.3.jar

ה מִבְחָן ערכת המקור מכילה את הפלטים של רָאשִׁי בנתיב הכיתתי שלה קומפילציה וכולל גם את התלות שלה.

לאחר מכן, בואו ניצור את מבחן היחידות שלנו:

מחלקה ציבורית SourceSetsTest {@Test public void whenRun_ThenSuccess () {SourceSetsObject underTest = new SourceSetsObject ("lorem", "ipsum"); assertThat (underTest.getUser (), הוא ("לורם")); assertThat (underTest.getPassword (), הוא ("ipsum")); }}

כאן אנו בודקים POJO פשוט המאחסן שני ערכים. אנחנו יכולים להשתמש בו ישירות בגלל ה רָאשִׁי התפוקות הן שלנו מִבְחָן מסלול כיתה.

לאחר מכן, בוא נפעיל את זה מ- Gradle:

./gradlew clean test> Task: source-sets: test com.baeldung.test.SourceSetsTest> whenRunThenSuccess PASSED 

3. ערכות מקור מותאמות אישית

עד כה ראינו כמה ברירות מחדל הגיוניות. עם זאת, בפועל, לעתים קרובות אנו זקוקים לקבוצות מקור מותאמות אישית, במיוחד למבחני שילוב.

הסיבה לכך היא שאולי נרצה שיהיו ספריות בדיקה ספציפיות רק בנתיב הכיתה. ייתכן שנרצה לבצע אותם ללא תלות במבחני היחידות.

3.1. הגדרת ערכות מקור מותאמות אישית

בואו לעצב ספריית מקור נפרדת למבחני האינטגרציה שלנו:

ערכות מקור itest │ └── SourceSetsITest.java └── build.gradle 

הבא, בואו להגדיר את זה ב build.gradle משתמש ב sourceSets לִבנוֹת:

sourceSets {itest {java {}}} תלות {יישום ('org.apache.httpcomponents: httpclient: 4.5.12') testImplementation ('junit: junit: 4.12')} // הצהרות אחרות הושמטו 

שים לב שלא ציינו שום ספריה מותאמת אישית. הסיבה לכך היא שהתיקיה שלנו תואמת את שם ערכת המקור החדשה (אני בוחן).

אנחנו יכולים התאמה אישית של ספריות הכלולות ב- srcDirs תכונה:

sourceSets {itest {java {srcDirs ("src / itest")}}}

זוכר את משימת העוזר שלנו מההתחלה? בואו נבדוק מחדש ונראה מה הוא מדפיס:

$ ./gradlew printSourceSetInformation> משימה: ערכות מקור: printSourceSetInformation [itest] -> ספריות מקור: [... / source-sets / src / itest / java] -> ספריות פלט: [... / source- סטים / build / מחלקות / java / itest] -> הידור מסלול מחלקה: ... / source-sets / build / classes / java / main ... / source-sets / build / resources / main [main] // same פלט כמו קודם [מבחן] // אותה פלט כמו קודם

3.2. הקצאת תלויות ספציפיות של קבוצת מקורות

זוכר תצורות ברירת מחדל? כעת אנו מקבלים מספר תצורות עבור ה- אני בוחן סט המקור גם כן.

בואו נשתמש itest יישום להקצות תלות חדשה:

תלות {יישום ('org.apache.httpcomponents: httpclient: 4.5.12') testImplementation ('junit: junit: 4.12') itestImplementation ('com.google.guava: guava: 29.0-jre')}

זה חל רק על מבחני אינטגרציה.

בואו לשנות את המבחן הקודם שלנו ולהוסיף אותו כמבחן שילוב:

מחלקה ציבורית SourceSetsItest {@Test public void givenImmutableList_whenRun_ThenSuccess () {SourceSetsObject underTest = SourceSetsObject new ("לורם", "ipsum"); רשימת someStrings = ImmutableList.of ("Baeldung", "is", "cool"); assertThat (underTest.getUser (), הוא ("לורם")); assertThat (underTest.getPassword (), הוא ("ipsum")); assertThat (someStrings.size (), הוא (3)); }}

להיות יכול להפעיל אותו, אנחנו צריכים להגדיר משימת בדיקה מותאמת אישית המשתמשת בפלטים המהודרים:

// מקור מגדיר הצהרות // הצהרות תלות משימת זה (סוג: מבחן) {description = "הפעל בדיקות שילוב" group = "verification" testClassesDirs = sourceSets.itest.output.classesDirs classpath = sourceSets.itest.runtimeClasspath}

הצהרות אלה מוערכות בשלב התצורה. כתוצאה, הסדר שלהם חשוב.

לדוגמא, איננו יכולים להתייחס ל- אני בוחן מקור המוגדר בגוף המשימה לפני שהוכרז על כך.

בואו נראה מה יקרה אם נבצע את הבדיקה:

$ ./gradlew clean itest // כמה בעיות אוסף FAILURE: הבנייה נכשלה למעט יוצא מן הכלל. * מה השתבש: הביצוע נכשל במשימה ': ערכות המקור: compileItestJava'. > ההידור נכשל; ראה את פלט השגיאה של המהדר לפרטים.

בניגוד לריצה הקודמת, אנו מקבלים הפעם שגיאת אוסף. אז מה קרה?

ערכת המקור החדשה הזו יוצרת תצורה עצמאית.

במילים אחרות, itest יישום אינו יורש את JUnit תלות, וגם לא מקבל תפוקות של רָאשִׁי.

בואו נתקן זאת בתצורת Gradle שלנו:

sourceSets {itest {compileClasspath + = sourceSets.main.output runtimeClasspath + = sourceSets.main.output java {}}} // תצורות הצהרת תלות {itestImplementation.extendsFrom (testImplementation) itestRuntimeOnly.extendsFrom (testRuntimeOnly)}

בואו בואו ונבצע מחדש את מבחן השילוב שלנו:

$ ./gradlew clean itest> Task: source-sets: itest com.baeldung.itest.SourceSetsItest> givenImmutableList_whenRun_ThenSuccess PASSED

המבחן עובר.

3.3. טיפול ב- Eclipse IDE

ראינו עד כה כיצד לעבוד עם ערכות מקור ישירות עם Gradle. עם זאת, לרוב נשתמש ב- IDE (כגון Eclipse).

כשאנחנו מייבאים את הפרויקט, אנו מקבלים כמה בעיות אוסף:

עם זאת, אם אנו מריצים את מבחן האינטגרציות מ- Gradle, לא נקבל שגיאות:

$ ./gradlew clean itest> Task: source-sets: itest com.baeldung.itest.SourceSetsItest> givenImmutableList_whenRun_ThenSuccess PASSED

אז מה קרה? במקרה זה, גויאבה התלות שייכת ל itest יישום.

לצערי, התוסף Eclipse Buildship Gradle אינו מטפל בתצורות המותאמות אישית הללו טוב מאוד.

בואו לתקן זאת ב build.gradle:

החל תוסף: "eclipse" // הצהרות קודמות eclipse {classpath {plusConfigurations + = [configurations.itestCompileClasspath]}} 

בואו נסביר מה עשינו כאן. צירפנו את התצורה שלנו לדרך הכיתה של ליקוי חמה.

אם נרענן את הפרויקט, בעיות האוסף נעלמו.

למרות זאת, יש חסרון בגישה זו: IDE אינו מבחין בין תצורות.

זה אומר אנחנו יכולים לייבא בקלות גויאבה בשלנו מִבְחָן מקורות (שרצינו להימנע ממנו במיוחד).

4. מסקנה

במדריך זה סקרנו את היסודות של ערכות המקור של Gradle.

לאחר מכן הסברנו כיצד עובדים ערכות מקור מותאמות אישית וכיצד להשתמש בהן ב- Eclipse.

כרגיל, אנו יכולים למצוא את קוד המקור המלא ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found