【发布时间】:2016-08-02 11:59:39
【问题描述】:
我有一个使用 Spring Boot + Vaadin 的 Gradle 项目。 Spring Boot 和 Vaadin 的 Gradle 插件配置如下:
buildscript {
ext {
springBootVersion = '1.3.7.RELEASE'
}
...
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
classpath "fi.jasoft.plugin:gradle-vaadin-plugin:0.11.1"
}
}
Vaadin 版本指定如下:
vaadin {
version '7.6.8'
widgetset 'com.vaadin.DefaultWidgetSet'
}
Vaadin 依赖项指定如下:
dependencies {
compile 'com.vaadin:vaadin-spring-boot-starter:1.0.0'
compile 'com.vaadin:vaadin-server:${vaadin.version}'
compile 'com.vaadin:vaadin-client:${vaadin.version}'
...
}
这很好用,但是一旦我将 Spring Boot 版本更改为
springBootVersion = '1.4.0.RELEASE'
然后我得到错误:
路径中索引 89 处的非法字符: https://oss.sonatype.org/content/repositories/vaadin-snapshots/com/vaadin/vaadin-server/${vaadin.version}/vaadin-server-${vaadin.version}.pom
更新
Groovy(Gradle 使用)仅在使用双引号 (") 时才支持字符串插值,因此将 Vaadin 依赖项更改为
dependencies {
compile "com.vaadin:vaadin-spring-boot-starter:1.0.0"
compile "com.vaadin:vaadin-server:${vaadin.version}"
compile "com.vaadin:vaadin-client:${vaadin.version}"
...
}
修复它。现在真正的问题是,如果我将 Spring Boot 降级为 1.3.7-RELEASE,为什么单引号可以正常工作。
【问题讨论】:
-
我不是 gradle 专家,但乍一看,它似乎没有替换
compile 'com.vaadin:vaadin-server:${vaadin.version}'中的${vaadin.version}。您可以尝试替换single quote (') with double quotes (") 吗?通过快速测试,这在本地对我有用。否则你能分享整个构建文件吗? -
同时我也发现了这一点:它确实适用于双引号。但它也适用于较旧的 Spring Boot 版本的单引号......不知道这两者是如何相关的。
-
嗯只是一个疯狂的想法,也许这些部门已经在本地存储库中,所以在您切换到更新的引导版本之前不需要重新下载它们?!好奇怪……
-
本地仓库是指 Gradle 缓存吗?我不认为这是问题所在:我最近才升级到较新的 Vaadin 版本,所以当时它必须下载较新的版本并且一切正常。此外,更改 Spring Boot 版本不会更改 Vaadin 版本。
-
就像我说的,我不是 gradle 专家,所以我对术语和功能很熟悉,但我认为它可能有一个本地 repo/缓存,它可以像 maven 那样下载工件。你能分享整个构建文件或类似的sscce 来重现这个吗?我之所以问,是因为无论我使用什么版本,在本地我都会遇到相同的错误,而且我对这种行为非常好奇。
标签: gradle spring-boot vaadin spring-boot-gradle-plugin