如何编写我可以在其他webapps中包含的Vaadin主题?

时间:2012-07-02 18:00:09

标签: maven vaadin

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我遇到了同样的问题。我通过使用战争叠加来解决它。

我在父项目中有一个基本主题,它在客户的配置项目中进行了扩展。配置项目仅使用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>