如何解决我可以在gradle中指定我只想使用某个插件进行测试吗?
我有一个项目,并且仅出于测试目的,我想站立一个快速的websocket服务器。 Spring Boot似乎是最简单的方法,但我不想在实现中包括插件,仅用于测试。我似乎找不到类似这样的文档,但是总的来说,我发现“可以让我做饭”这个问题的答案通常是肯定的。
那么我该如何指定仅将'org.springframework.boot'插件用于测试版本?
我尝试将插件{}块放置在测试{}块中,但这不起作用。
解决方法
我非常确定您可以按常规方式应用org.springframework.boot
插件,并且不会影响您的构建工件。
但是,如果您担心插件可能会对构建工件产生不良影响,则可以动态应用插件。默认情况下,旧的插件机制实际上以这种方式工作,并且将插件的分辨率从其应用程序分离到Project
实例:
// This part resolves the plugin
buildscript {
repositories {
maven {
url 'https://plugins.gradle.org/m2/'
}
}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.3.2.RELEASE'
}
}
// This part applies the plugin
apply plugin: 'org.springframework.boot'
这样可以根据条件应用插件:
if (testMode) {
apply plugin: 'org.springframework.boot'
}
使用新的plugins
块来应用插件,这不可能直接实现,因为plugins
块是不允许自定义代码的特殊块:
// This is not allowed!
plugins {
if (testMode) {
id 'org.springframework.boot' version '2.3.2.RELEASE'
}
}
解决方案是告诉plugins
块自动解析插件without applying it。然后可以使用apply plugin:
动态完成此操作:
plugins {
id 'org.springframework.boot' version '2.3.2.RELEASE' apply false
}
if (testMode) {
apply plugin: 'org.springframework.boot'
}
,
您不必使用org.springframework.boot
插件:只需使用io.spring.dependency-management
插件。这样,您将能够在testImplementation
配置中声明与spring- *相关的依赖关系,而对implementation
配置没有任何影响。
plugins {
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-websocket'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage',module: 'junit-vintage-engine'
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:2.2.0.RELEASE"
}
}
然后在您的测试源中,您将能够声明SpringBoot应用程序和其他与Websocket相关的内容(控制器)
编辑 org.springframework.boot
的实际作用是通过声明jar
任务来更改主要bootJar
工件的包装,请参见{{3} }。据您了解,就您而言,如果您只想在测试源集中运行某些Spring应用程序,则不需要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。