{"id":1853,"date":"2025-01-26T11:01:38","date_gmt":"2025-01-26T03:01:38","guid":{"rendered":"https:\/\/www.fanyamin.com\/wordpress\/?p=1853"},"modified":"2025-01-26T11:33:32","modified_gmt":"2025-01-26T03:33:32","slug":"%e7%94%a8-kotlin-%e7%9a%84-dsl%ef%bc%88%e9%a2%86%e5%9f%9f%e7%89%b9%e5%ae%9a%e8%af%ad%e8%a8%80%ef%bc%89%e6%9d%a5%e5%ae%9a%e4%b9%89%e6%9e%84%e5%bb%ba%e8%84%9a%e6%9c%ac","status":"publish","type":"post","link":"https:\/\/www.fanyamin.com\/wordpress\/?p=1853","title":{"rendered":"\u7528 Kotlin \u7684 DSL\uff08\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff09\u6765\u5b9a\u4e49\u6784\u5efa\u811a\u672c"},"content":{"rendered":"<p>Kotlin DSL \u662f Gradle \u63d0\u4f9b\u7684\u4e00\u79cd\u57fa\u4e8e Kotlin \u7684\u6784\u5efa\u811a\u672c\u8bed\u8a00\uff0c\u4e0e\u4f20\u7edf\u7684 Groovy \u811a\u672c\u76f8\u6bd4\uff0cKotlin DSL \u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u7c7b\u578b\u5b89\u5168\u548c\u667a\u80fd\u63d0\u793a\u652f\u6301\u3002\u4ee5\u4e0b\u662f\u7528 Kotlin DSL \u5b9a\u4e49\u4e00\u4e2a Java \u9879\u76ee\u7684\u6784\u5efa\u811a\u672c\u7684\u8be6\u7ec6\u6307\u5357\u3002<\/p>\n<ol>\n<li>\u9879\u76ee\u7ed3\u6784<\/li>\n<\/ol>\n<p>Gradle \u4f7f\u7528 Kotlin DSL \u7684\u9879\u76ee\u7ed3\u6784\u4e0e Groovy DSL \u76f8\u4f3c\uff0c\u533a\u522b\u5728\u4e8e\u6784\u5efa\u811a\u672c\u7684\u6587\u4ef6\u540d\u662f build.gradle.kts\uff08\u800c\u4e0d\u662f build.gradle\uff09\u3002<\/p>\n<p>\u76ee\u5f55\u7ed3\u6784\uff1a<\/p>\n<p>project\/<br \/>\n\u251c\u2500\u2500 build.gradle.kts  \/\/ Kotlin DSL \u6784\u5efa\u811a\u672c<br \/>\n\u251c\u2500\u2500 settings.gradle.kts  \/\/ \u9879\u76ee\u914d\u7f6e\u6587\u4ef6<br \/>\n\u251c\u2500\u2500 src\/<br \/>\n\u2502   \u251c\u2500\u2500 main\/<br \/>\n\u2502   \u2502   \u251c\u2500\u2500 java\/    \/\/ Java \u6e90\u4ee3\u7801<br \/>\n\u2502   \u2514\u2500\u2500 test\/<br \/>\n\u2502       \u251c\u2500\u2500 java\/    \/\/ \u6d4b\u8bd5\u4ee3\u7801<\/p>\n<ol start=\"2\">\n<li>\u521b\u5efa build.gradle.kts<\/li>\n<\/ol>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u4f7f\u7528 Kotlin DSL \u5b9a\u4e49 Java \u9879\u76ee\u7684\u7b80\u5355\u793a\u4f8b\uff1a<\/p>\n<p>plugins {<br \/>\njava \/\/ \u5e94\u7528 Java \u63d2\u4ef6<br \/>\n}<\/p>\n<p>group = &quot;com.example&quot; \/\/ \u9879\u76ee\u7ec4\u540d<br \/>\nversion = &quot;1.0-SNAPSHOT&quot; \/\/ \u7248\u672c\u53f7<\/p>\n<p>repositories {<br \/>\nmavenCentral() \/\/ \u4f7f\u7528 Maven Central \u4ed3\u5e93<br \/>\n}<\/p>\n<p>dependencies {<br \/>\nimplementation(&quot;org.apache.commons:commons-lang3:3.12.0&quot;) \/\/ \u7f16\u8bd1\u4f9d\u8d56<br \/>\ntestImplementation(&quot;junit:junit:4.13.2&quot;) \/\/ \u6d4b\u8bd5\u4f9d\u8d56<br \/>\n}<\/p>\n<p>tasks.test { \/\/ \u914d\u7f6e\u6d4b\u8bd5\u4efb\u52a1<br \/>\nuseJUnit()<br \/>\n}<\/p>\n<ol start=\"3\">\n<li>\u521b\u5efa settings.gradle.kts<\/li>\n<\/ol>\n<p>settings.gradle.kts \u7528\u4e8e\u914d\u7f6e\u9879\u76ee\u7684\u540d\u79f0\u548c\u591a\u6a21\u5757\u9879\u76ee\u3002<\/p>\n<p>\u793a\u4f8b\uff1a<\/p>\n<p>rootProject.name = &quot;my-java-project&quot;<\/p>\n<ol start=\"4\">\n<li>\u914d\u7f6e\u8bf4\u660e<\/li>\n<\/ol>\n<p>\u63d2\u4ef6<\/p>\n<p>plugins {<br \/>\njava \/\/ Java \u9879\u76ee\u6240\u9700\u63d2\u4ef6<br \/>\n}<\/p>\n<p>plugins \u5757\u7528\u4e8e\u58f0\u660e\u9879\u76ee\u4f7f\u7528\u7684\u63d2\u4ef6\uff0cjava \u662f\u7528\u4e8e Java \u9879\u76ee\u7684\u6838\u5fc3\u63d2\u4ef6\u3002<\/p>\n<p>\u9879\u76ee\u5c5e\u6027<\/p>\n<p>group = &quot;com.example&quot; \/\/ \u9879\u76ee\u7ec4\u540d<br \/>\nversion = &quot;1.0-SNAPSHOT&quot; \/\/ \u7248\u672c\u53f7<\/p>\n<p>\u8fd9\u4e9b\u5c5e\u6027\u5b9a\u4e49\u4e86\u9879\u76ee\u7684\u5143\u4fe1\u606f\uff0c\u901a\u5e38\u7528\u4e8e\u751f\u6210\u6784\u5efa\u4ea7\u7269\u7684\u540d\u79f0\u3002<\/p>\n<p>\u4f9d\u8d56\u7ba1\u7406<\/p>\n<p>repositories {<br \/>\nmavenCentral() \/\/ \u6307\u5b9a Maven Central \u4f5c\u4e3a\u4f9d\u8d56\u4ed3\u5e93<br \/>\n}<\/p>\n<p>repositories \u5757\u5b9a\u4e49\u4e86\u4ece\u54ea\u4e9b\u4ed3\u5e93\u4e0b\u8f7d\u9879\u76ee\u4f9d\u8d56\u3002\u5e38\u7528\u7684\u4ed3\u5e93\u5305\u62ec\uff1a<br \/>\n\u2022   mavenCentral()\uff1aMaven Central \u4ed3\u5e93\u3002<br \/>\n\u2022   jcenter()\uff1aBintray \u7684 JCenter \u4ed3\u5e93\uff08\u5df2\u8fc7\u65f6\uff0c\u4e0d\u63a8\u8350\uff09\u3002<br \/>\n\u2022   google()\uff1aAndroid \u9879\u76ee\u4e13\u7528\u4ed3\u5e93\u3002<\/p>\n<p>\u4f9d\u8d56\u58f0\u660e<\/p>\n<p>dependencies {<br \/>\nimplementation(&quot;org.apache.commons:commons-lang3:3.12.0&quot;) \/\/ \u7f16\u8bd1\u4f9d\u8d56<br \/>\ntestImplementation(&quot;junit:junit:4.13.2&quot;) \/\/ \u6d4b\u8bd5\u4f9d\u8d56<br \/>\n}<\/p>\n<p>\u4f9d\u8d56\u7c7b\u578b\u8bf4\u660e\uff1a<br \/>\n\u2022   implementation\uff1a\u4e3b\u4ee3\u7801\u7684\u7f16\u8bd1\u4f9d\u8d56\u3002<br \/>\n\u2022   testImplementation\uff1a\u6d4b\u8bd5\u4ee3\u7801\u7684\u7f16\u8bd1\u4f9d\u8d56\u3002<br \/>\n\u2022   runtimeOnly\uff1a\u8fd0\u884c\u65f6\u4f9d\u8d56\u3002<br \/>\n\u2022   compileOnly\uff1a\u53ea\u5728\u7f16\u8bd1\u671f\u4f7f\u7528\u7684\u4f9d\u8d56\u3002<\/p>\n<p>\u4efb\u52a1\u914d\u7f6e<\/p>\n<p>Kotlin DSL \u63d0\u4f9b\u4e86\u7c7b\u578b\u5b89\u5168\u7684\u65b9\u5f0f\u914d\u7f6e\u4efb\u52a1\u3002\u4f8b\u5982\uff1a<\/p>\n<p>tasks.test {<br \/>\nuseJUnit() \/\/ \u4f7f\u7528 JUnit \u8fd0\u884c\u6d4b\u8bd5<br \/>\n}<\/p>\n<p>\u4f60\u53ef\u4ee5\u901a\u8fc7 tasks \u5757\u8bbf\u95ee\u5e76\u81ea\u5b9a\u4e49 Gradle \u7684\u5185\u7f6e\u4efb\u52a1\u3002<\/p>\n<ol start=\"5\">\n<li>\n<p>\u4f7f\u7528 Kotlin DSL \u7684\u4f18\u52bf<br \/>\n\u2022   \u7c7b\u578b\u5b89\u5168\uff1aKotlin DSL \u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u7c7b\u578b\u68c0\u67e5\uff0c\u907f\u514d\u4e86 Groovy \u4e2d\u53ef\u80fd\u51fa\u73b0\u7684\u8fd0\u884c\u65f6\u9519\u8bef\u3002<br \/>\n\u2022   \u667a\u80fd\u63d0\u793a\uff1a\u5728\u652f\u6301 Kotlin \u7684 IDE\uff08\u5982 IntelliJ IDEA\uff09\u4e2d\uff0cKotlin DSL \u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u4ee3\u7801\u8865\u5168\u529f\u80fd\u3002<br \/>\n\u2022   \u66f4\u73b0\u4ee3\u5316\uff1aKotlin DSL \u66f4\u52a0\u5951\u5408\u73b0\u4ee3 Kotlin \u9879\u76ee\u3002<\/p>\n<\/li>\n<li>\n<p>\u6784\u5efa\u548c\u8fd0\u884c\u9879\u76ee<\/p>\n<\/li>\n<\/ol>\n<p>\u521d\u59cb\u5316\u9879\u76ee<\/p>\n<p>\u5982\u679c\u4f60\u5e0c\u671b\u76f4\u63a5\u521d\u59cb\u5316\u4e00\u4e2a\u4f7f\u7528 Kotlin DSL \u7684\u9879\u76ee\uff0c\u53ef\u4ee5\u8fd0\u884c\uff1a<\/p>\n<p>gradle init<\/p>\n<p>\u5728\u4ea4\u4e92\u63d0\u793a\u4e2d\u9009\u62e9\uff1a<br \/>\n\u2022   \u9879\u76ee\u7c7b\u578b\uff1aapplication \u6216 library<br \/>\n\u2022   \u811a\u672c\u7c7b\u578b\uff1aKotlin DSL<\/p>\n<p>\u5e38\u7528 Gradle \u547d\u4ee4<br \/>\n\u2022   \u6784\u5efa\u9879\u76ee\uff1a<\/p>\n<p>gradle build<\/p>\n<pre><code>\u2022   \u6e05\u7406\u6784\u5efa\u4ea7\u7269\uff1a<\/code><\/pre>\n<p>gradle clean<\/p>\n<pre><code>\u2022   \u8fd0\u884c\u6d4b\u8bd5\uff1a<\/code><\/pre>\n<p>gradle test<\/p>\n<ol start=\"7\">\n<li>\u793a\u4f8b\uff1a\u590d\u6742 Java \u9879\u76ee<\/li>\n<\/ol>\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u793a\u4f8b\uff0c\u5305\u542b\u81ea\u5b9a\u4e49\u4efb\u52a1\u548c\u591a\u4e2a\u4f9d\u8d56\u914d\u7f6e\uff1a<\/p>\n<p>plugins {<br \/>\njava<br \/>\napplication \/\/ \u6dfb\u52a0 application \u63d2\u4ef6<br \/>\n}<\/p>\n<p>group = &quot;com.example&quot;<br \/>\nversion = &quot;1.0&quot;<\/p>\n<p>repositories {<br \/>\nmavenCentral()<br \/>\n}<\/p>\n<p>dependencies {<br \/>\nimplementation(&quot;org.apache.logging.log4j:log4j-core:2.19.0&quot;) \/\/ \u65e5\u5fd7\u5e93<br \/>\ntestImplementation(&quot;org.junit.jupiter:junit-jupiter:5.10.0&quot;) \/\/ JUnit 5<br \/>\n}<\/p>\n<p>application {<br \/>\nmainClass.set(&quot;com.example.Main&quot;) \/\/ \u8bbe\u7f6e\u4e3b\u7c7b<br \/>\n}<\/p>\n<p>\/\/ \u81ea\u5b9a\u4e49\u4efb\u52a1\uff1a\u6253\u5370\u9879\u76ee\u4fe1\u606f<br \/>\ntasks.register(&quot;printInfo&quot;) {<br \/>\ndoLast {<br \/>\nprintln(&quot;Project: $group:$name:$version&quot;)<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ \u914d\u7f6e\u6d4b\u8bd5\u4efb\u52a1<br \/>\ntasks.test {<br \/>\nuseJUnitPlatform() \/\/ \u4f7f\u7528 JUnit 5<br \/>\n}<\/p>\n<p>\u8fd0\u884c\u81ea\u5b9a\u4e49\u4efb\u52a1\uff1a<\/p>\n<p>gradle printInfo<\/p>\n<ol start=\"8\">\n<li>\u5b66\u4e60\u8d44\u6e90<br \/>\n\u2022   Gradle \u5b98\u65b9\u6587\u6863<br \/>\n\u2022   Kotlin DSL \u6307\u5357<br \/>\n\u2022   Gradle \u6559\u7a0b<\/li>\n<\/ol>\n<p>\u901a\u8fc7\u4f7f\u7528 Kotlin DSL\uff0c\u4f60\u53ef\u4ee5\u66f4\u52a0\u9ad8\u6548\u548c\u5b89\u5168\u5730\u6784\u5efa\u548c\u7ba1\u7406 Java \u9879\u76ee\uff01 \ud83c\udf89<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kotlin DSL \u662f Gradle \u63d0\u4f9b\u7684\u4e00\u79cd\u57fa\u4e8e Kotlin \u7684\u6784\u5efa\u811a\u672c\u8bed\u8a00\uff0c\u4e0e\u4f20\u7edf\u7684 Groovy \u811a\u672c\u76f8\u6bd4\uff0cKotlin DSL \u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u7c7b\u578b\u5b89\u5168\u548c\u667a\u80fd\u63d0\u793a\u652f\u6301\u3002\u4ee5\u4e0b\u662f\u7528 Kotlin DSL \u5b9a\u4e49\u4e00\u4e2a Java \u9879\u76ee\u7684\u6784\u5efa\u811a\u672c\u7684\u8be6\u7ec6\u6307\u5357\u3002 \u9879\u76ee\u7ed3\u6784 Gradle \u4f7f\u7528 Kotlin DSL \u7684\u9879\u76ee\u7ed3\u6784\u4e0e Groovy DSL \u76f8\u4f3c\uff0c\u533a\u522b\u5728\u4e8e\u6784\u5efa\u811a\u672c\u7684\u6587\u4ef6\u540d\u662f build.gradle.kts\uff08\u800c\u4e0d\u662f build.gradle\uff09\u3002 \u76ee\u5f55\u7ed3\u6784\uff1a project\/ \u251c\u2500\u2500 build.gradle.kts \/\/ Kotlin DSL \u6784\u5efa\u811a\u672c \u251c\u2500\u2500 settings.gradle.kts \/\/ \u9879\u76ee\u914d\u7f6e\u6587\u4ef6 \u251c\u2500\u2500 src\/ \u2502 \u251c\u2500\u2500 main\/ \u2502 \u2502 \u251c\u2500\u2500 java\/ \/\/ Java \u6e90\u4ee3\u7801 \u2502 \u2514\u2500\u2500 test\/ \u2502 [&hellip;] <a class=\"read-more\" href=\"https:\/\/www.fanyamin.com\/wordpress\/?p=1853\" title=\"Permanent Link to: \u7528 Kotlin \u7684 DSL\uff08\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff09\u6765\u5b9a\u4e49\u6784\u5efa\u811a\u672c\">&rarr;Read&nbsp;more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1853","post","type-post","status-publish","format-standard","hentry","category-5"],"_links":{"self":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1853"}],"collection":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1853"}],"version-history":[{"count":1,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions"}],"predecessor-version":[{"id":1854,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions\/1854"}],"wp:attachment":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}