java - 使用 DSL 的 gradle 插件如何工作?
问题描述
我很困惑,请有人纠正我
从 Gradle 插件门户中,它说使用以下方法添加插件
-------Using the plugins DSL:--------------------
plugins {
id "com.github.edeandrea.xjc-generation" version "1.4"
}
-------Using legacy plugin application:--------
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.edeandrea:xjc-generation-gradle-plugin:1.4"
}
}
apply plugin: "com.github.edeandrea.xjc-generation"
遗留方法非常清楚:根据我的理解,它将在存储库(指定的 Maven URL)中找到该依赖项并将其添加到类路径中,以便应用程序可以选择指定的插件
但是在新方法(即使用 DSL)的情况下,它什么也没说,我的理解是插件必须在官方 Gradle 存储库中发布才能访问它,但是build.gradle
文件如何知道在哪里找到它,这意味着我们需要添加repositories {}
块并在其中指定mavencentral()
以使其工作还是需要添加其他任何东西?
控制新插件方法中的块也pluginMangement
存在settings.gradle
,我尝试定义repositories {}
块并添加mavencentral()
但它不起作用。
简而言之,使用 DSL 添加的插件是如何工作的,哪个块告诉从哪里找到该插件,然后哪一行告诉将其添加到类路径中。
更新:
例如,repositories-buildscript 部分中的 maven 块告诉在url "https://plugins.gradle.org/m2/
location 下查看插件,并且 dependencies-buildscript 中的 classpath 标签告诉将此依赖项添加到应用程序类路径中
更正: mavenCentral()
解决方案
所以我在我的 gradle+Java 11 项目中遇到了同样的问题,我使用https://github.com/edeandrea/xjc-generation-gradle-plugin解决了。它并不像看起来那么简单。通常,有必要添加其他依赖项,这是我的情况。我的build.gradlw
样子:
plugins {
id 'java'
id "com.github.davidmc24.gradle.plugin.avro" version "1.0.0"
id 'idea' // optional (to generate IntelliJ IDEA project files)
id 'com.github.edeandrea.xjc-generation' version '1.6'
}
description = "spring-kafka-stream"
group = 'com.github.felipegutierrez.explore.spring'
version = '0.0.1'
sourceCompatibility = '11'
ext {
jaxbVersion = '2.3.1'
}
dependencies {
...
implementation "javax.xml.bind:jaxb-api:$jaxbVersion"
xjc "javax.xml.bind:jaxb-api:$jaxbVersion"
xjc "org.glassfish.jaxb:jaxb-runtime:$jaxbVersion"
xjc "org.glassfish.jaxb:jaxb-xjc:$jaxbVersion"
}
xjcGeneration {
defaultAdditionalXjcOptions = ['encoding': 'UTF-8']
schemas {
order {
schemaFile = 'order.xsd'
javaPackageName = 'com.github.felipegutierrez.explore.spring.model'
}
}
}
除了xjc
我必须添加的所有依赖项之外implementation "javax.xml.bind:jaxb-api:$jaxbVersion"
。然后我创建文件src/main/schemas/xjc/order.xsd
:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="order-by" type="xs:string"/>
<xs:element name="ship-to">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="order-id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
推荐阅读
- json - 如何进入我的帖子颤动/REST的详细信息页面?
- javascript - 将 UTC 时间 (HH:MM) 转换为本地时间
- javascript - jquery 是从哪里来的??(导轨)
- vb.net - 使用 StreamReader vb.net 的行文本文件索引
- c# - 有没有更好的方法来概括具有相同属性的 dbSet - 实体框架
- mysql - 如何在不丢失数据的情况下将 varchar 日期列更改为日期类型列
- java - 带有多个 if 语句的意图
- django - 从 ModelSerializer 中删除嵌套
- amazon-web-services - 使用 selenium AWS lambda 进行 Web 抓取
- amazon-web-services - s3,需要从浏览器下载,10GB限制