“目标更新主题需要Vaadin 7.1或更高版本”

时间:2015-12-18 13:52:32

标签: maven intellij-idea vaadin vaadin7

我想做的就是扩展现有的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]

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。