【问题标题】:How to write a Vaadin theme I can include in my other webapps?如何编写可以包含在其他 web 应用程序中的 Vaadin 主题?
【发布时间】:2023-12-21 22:40:01
【问题描述】:

我正在尝试创建一个简单的主题(使用 Chameleon 和一些自定义 css 和图像等),我已经完成了。

问题是我想将它包装在一个 maven 项目中并作为依赖项从其他 Vaadin 项目中引用,因此我可以以相同的方式为我的所有 Vaadin 应用程序设置主题 - 甚至更好地将其作为父项目的依赖项这样整个应用程序的样式就相同了,我可以为不同的客户重新设计它。

我不确定如何打包和部署主题项目,以便它可以在其他项目中使用?我是否应该把它变成一个战争项目——但是其他项目如何“完成它”?他们将在他们自己的 VAADIN/themes 目录下寻找主题 - 而不是复制到那里(不知何故),我怎么能让他们引用一个副本?

【问题讨论】:

    标签: maven vaadin


    【解决方案1】:

    我也遇到了同样的问题。我通过使用战争覆盖解决了它。

    我在父项目中有一个基本主题,该主题在客户的配置项目中进行了扩展。配置项目只是将 war 作为运行时依赖项,并且父项目的文件被覆盖,如 here 解释的那样。

    只需在客户端项目中添加依赖即可:

    <dependency>
        <groupId>com.mygroup</groupId>
        <artifactId>my-parent-project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>war</type>
        <scope>runtime</scope>
    </dependency>
    

    并在客户端主题的styles.css文件中导入父项目的样式:

    @import "../parent-theme/styles.css"
    

    并添加客户端的样式。

    如果需要使用父项目的类,可以在maven-war-plugin配置中设置attachClasses属性为true,如果需要调试也可以使用maven-source-plugin附加源:

    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
            <attachClasses>true</attachClasses>
        </configuration>
    </plugin>
    
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1.2</version>
        <executions>
            <execution>
                <id>attach-sources</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <attach>true</attach>
        </configuration>
    </plugin>
    

    并将它们包含在您客户的项目中:

    <dependency>
        <groupId>com.mygroup</groupId>
        <artifactId>my-parent-project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <classifier>classes</classifier>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    

    【讨论】:

    • 是的,我就是这么做的。
    【解决方案2】:

    我想我找到了一种方法 - 不确定这是不是最好的方法,因为它将主题 css 复制到多个战争项目中,而不是创建一个共享实例,但唯一的另一种方法是做一些巧妙的服务器配置来共享一个跨项目的网址或其他东西。

    http://www.ensor.cc/2011/06/mavens-war-overlay-what-are-war.html

    【讨论】:

      最近更新 更多