我想做的就是扩展现有的Vaadin主题“Valo”。
我正在使用IntelliJ和Maven。
在我的UI类中:
@Theme("myTheme")
...
public class MyUI extends UI {
...
}
我在src / main / webapp / VAADIN / themes / myTheme中添加了styles.scss,其中包含以下内容:
$v-font-size: 12px;
$v-unit-size: 26px;
$v-unit-size--small: 20px;
$v-unit-size--tiny: 18px;
$v-layout-margin-top: 18px;
$v-layout-margin-right: 18px;
$v-layout-margin-bottom: 18px;
$v-layout-margin-left: 18px;
$v-layout-spacing-vertical: 7px;
$v-layout-spacing-horizontal: 6px;
@import "../valo/valo";
在我的pom.xml中,我包含了以下依赖项:
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-themes</artifactId>
<version>${vaadin.version}</version>
</dependency>
在那里我已经非常了解资源:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/webapp</directory>
</resource>
</resources>
尝试访问我的网站时出现此错误:
Requested resource [/VAADIN/themes/myTheme/styles.css] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.
我想这是因为需要编译scss文件。
为此,我在我的pom.xml中添加了以下插件:
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>update-theme</goal>
<goal>compile-theme</goal>
<!--
<goal>clean</goal>
<goal>resources</goal>
<goal>update-widgetset</goal>
<goal>compile</goal>
-->
</goals>
</execution>
</executions>
</plugin>
编译项目时,我收到以下错误:
[ERROR] Failed to execute goal com.vaadin:vaadin-maven-plugin:7.6.0.alpha2:updat
e-theme (default) on project classification-tool-webapp: The goal update-theme r
equires Vaadin 7.1 or later -> [Help 1]
答案 0 :(得分:0)
<强> TL; DR 强>
确保您具有正确的com.vaadin:vaadin-shared依赖性
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-shared</artifactId>
<version>${vaadin.version}</version>
</dependency>
注意:这种依赖关系不一定要明确。您可能已经通过其他依赖项(例如com.vaadin:vaadin-server)获得了它。检查你的pom.xml
更多详情
Vaadin maven plugin使用以下代码检查Vaadin版本:
protected boolean isAtLeastVaadinVersion(int major, int minor) {
// find "vaadin-shared" and check its version
for (Artifact artifact : getProjectArtifacts()) {
if (VAADIN_GROUP_ID.equals(artifact.getGroupId())
&& "vaadin-shared".equals(artifact.getArtifactId())) {
// TODO this is an ugly hack because Maven does not tolerate
// version numbers of the form "7.1.0.beta1"
String artifactVersion = artifact.getVersion();
(...)
简而言之,它遍历所有依赖项,寻找com.vaadin:vaadin-shared与特定版本。它不会检查实际的jar,而是检查它们的maven元数据。这意味着您可能已经拥有正确的JAR,例如:
<dependency>
<groupId>vaadin-shared-7.7.12</groupId>
<artifactId>vaadin-shared-7.7.12</artifactId>
<version>0</version>
<scope>system</scope>
<systemPath>lib/vaadin-shared-7.7.12.jar</systemPath>
</dependency>
但仍然检查Vaadin maven插件会失败。你会得到例外
目标更新主题需要Vaadin 7.1或更高版本
反之亦然 - 你可能会&#34;作弊&#34;插件有:
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-shared</artifactId>
<version>${vaadin.version}</version>
<scope>system</scope>
<systemPath>lib/fake.jar</systemPath>
</dependency>
(其中 fake.jar 不是 vaadin-shared.jar )并且您将通过检查(主题编辑不会工作,但是,因为你需要这两种方式)。 因此,该异常的解决方案是确保您具有正确版本的正确vaadin-shared。