Gradle Groovy@CompileStatic和@TypeChecked顺序、错误或误解
在编译gradle任务类时,我开始遇到一个奇怪的失败。这是我创建的任务:Gradle Groovy@CompileStatic和@TypeChecked顺序、错误或误解,gradle,groovy,compiler-errors,annotations,Gradle,Groovy,Compiler Errors,Annotations,在编译gradle任务类时,我开始遇到一个奇怪的失败。这是我创建的任务: package sample import groovy.transform.CompileStatic import groovy.transform.TypeChecked import org.gradle.api.artifacts.Dependency import org.gradle.api.provider.Property import org.gradle.api.tasks.AbstractCopy
package sample
import groovy.transform.CompileStatic
import groovy.transform.TypeChecked
import org.gradle.api.artifacts.Dependency
import org.gradle.api.provider.Property
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.bundling.Zip
import sample.internal.DataSourceXmlConfig
@TypeChecked
@CompileStatic
class DataSource extends Zip {
@Internal
final Property<File> warFile = project.objects.property(File.class)
DataSource() {
warFile.convention(project.provider {
def files = project.configurations.getByName('warApp').fileCollection { Dependency d ->
d.name == (archiveFileName.getOrElse("") - (~/\.[^.]+$/))
}
files.empty ? null : files.first()
})
}
/**
* This function is used to specify the location of data-sources.xml
* and injects it into the archive
* @param dsConf The configuration object used to specify the location of the
* file as well as any extra variables which should be injected into the file
*/
@Input
void dataSourceXml(@DelegatesTo(DataSourceXmlConfig) Closure dsConf) {
filesToUpdate {
DataSourceXmlConfig ds = new DataSourceXmlConfig()
dsConf.delegate = ds
dsConf.resolveStrategy = Closure.DELEGATE_FIRST
dsConf.call()
exclude('**/WEB-INF/classes/data-sources.xml')
from(ds.source) {
if (ds.expansions) {
expand(ds.expansions)
}
into('WEB-INF/classes/')
rename { 'data-sources.xml' }
}
}
}
private def filesToUpdate(@DelegatesTo(AbstractCopyTask) Closure action) {
action.delegate = this
action.resolveStrategy = Closure.DELEGATE_FIRST
if (warFile.isPresent()) {
from(project.zipTree(warFile)) {
action.call()
}
}
}
}
在这一点上,我想我的问题是,这是一个bug还是这两个注释的使用都有我不理解的地方?我更倾向于将其视为一个bug,因为顺序使错误消息消失。我的猜测是,这两个注释根本不应该一起使用
@CompileStatic
已经暗示了@TypeChecked
的行为了吗?经过更多的实验,我得出结论,不能同时使用这两种注释。更具体地说,@CompileStatic
应该明智地使用,并且只有在您完全确定没有使用Groovy的任何动态功能时才可以使用。我的猜测是,这两种注释根本不应该一起使用@CompileStatic
已经暗示了@TypeChecked
的行为了吗?经过更多的实验,我得出结论,不能同时使用这两种注释。更具体地说,应该明智地使用@CompileStatic
,并且只有在您完全确定没有使用Groovy的任何动态特性时才使用。
@CompileStatic
@TypeChecked
class DataSource extends Zip { ... }