当前位置: 首页 > 知识库问答 >
问题:

Vaadin WidgetSet.gwt.xml继承-编译时自动删除的标记

别峻
2023-03-14

最近我们更新了Vaadin7到Vaadin8。我们的一个组件不工作,当今天分析问题时,我发现它是由于仍然是Vaadin7,并且有不匹配。因此,我将该组件更新到Vaadin8(尽管目前仍然使用所有的.v7库,并在UI类上添加了@widgetset(“com.Vaadin.v7.vaadin7widgetset”),还添加了vaadin-compatibility-client-compilitedmaven依赖项。
我们对该组件的测试war再次正常工作,并且我将这个新版本部署到了我们的Nexus(使用了一个TODO将所有Vaadin7和Viritin组件更新到Vaadin8)。

现在,在我们的主项目中(我们使用这个组件),我已经在pom.xml中更新了它的版本,但是在运行它时,出现了与我之前在组件的UI类中添加了@WidgetSet相同的错误。我们的主项目已经有一个@Widgetset和我们的自定义Widgetset。我想我只需要将com.vaadin.v7.vaadin7WidgetSet作为 添加到我们主项目的这个WidgetSet.gwt.xml文件中,但是当我这样做并保存时,某个Maven插件自动将它重置为原来的状态。

这就是我们的widgetset.gwt.xml当前的样子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
        "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
<module>
    <inherits name="com.vaadin.DefaultWidgetSet" />

    <stylesheet src="resetbuttonfortextfield/styles.css" />
</module>

而当我试着加上这两行:

<!-- TODO: Remove following inherit after Templates Component has been migrated to Vaadin 8 -->
<inherits name="com.vaadin.v7.Vaadin7WidgetSet" />

保存后只保留TODO注释。由于这个项目的同事都住在世界的另一边,现在是晚上,我无法联系他们寻求帮助,所以我使用StackOverflow代替。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
      <groupId>our.project</groupId>
      <artifactId>web-parent</artifactId>
      <version>develop-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

  <artifactId>web2-widgetset</artifactId>
  <name>web2-widgetset</name>
  <packaging>jar</packaging>

  <dependencies>
    <!-- Versions for these are configured in the parent POM -->
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-server</artifactId>
    </dependency>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-client</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-client-compiler</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-maven-plugin</artifactId>
        <configuration>
          <extraJvmArgs>-Xmx1024M -Xss2048k</extraJvmArgs>
          <webappDirectory>${basedir}/target/classes/VAADIN/widgetsets</webappDirectory>
          <draftCompile>true</draftCompile>
          <compileReport>false</compileReport>
          <!-- Change to PRETTY (or possibly DETAILED) to get unobfuscated client side stack traces. A better approach for debugging is to use Super Dev  Mode -->
          <style>OBF</style>
          <strict>true</strict>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>update-widgetset</goal>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifestEntries>
              <Vaadin-Package-Version>1</Vaadin-Package-Version>
              <Vaadin-Widgetsets>our.project.Widgetset</Vaadin-Widgetsets>
            </manifestEntries>
          </archive>
          <!-- Exclude some unnecessary files generated by the GWT compiler. -->
          <excludes>
            <exclude>VAADIN/gwt-unitCache/**</exclude>
            <exclude>VAADIN/widgetsets/WEB-INF/**</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

TL;DR:如何在我的widgetset.gwt.xml中永久添加一个额外的 -标记(而不让我们的Mavenpom.xml中的一些插件覆盖这些手动更改)?

编辑:如果注释掉 update-widgetset widgetset.gwt.xml不再更新,但在pom.xml中出现错误:

GWT Module com.vaadin.v7.Vaadin7WidgetSet not found in project sources or resources. (com.vaadin:vaadin-maven-plugin:8.0.6:compile:default:process-classes)

org.apache.maven.plugin.MojoExecutionException: GWT Module com.vaadin.v7.Vaadin7WidgetSet not found in project sources or resources.
    at org.codehaus.mojo.gwt.shell.CompileMojo.compilationRequired(CompileMojo.java:701)
    at org.codehaus.mojo.gwt.shell.CompileMojo.compile(CompileMojo.java:567)
    at org.codehaus.mojo.gwt.shell.CompileMojo.doExecute(CompileMojo.java:435)
    at org.codehaus.mojo.gwt.shell.AbstractGwtShellMojo.execute(AbstractGwtShellMojo.java:182)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
    at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
    at com.vaadin.integration.eclipse.maven.VaadinMojoExecutionBuildParticipant.build(VaadinMojoExecutionBuildParticipant.java:87)
    at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:205)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:245)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:300)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:359)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:382)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.codehaus.mojo.gwt.utils.GwtModuleReaderException: GWT Module com.vaadin.v7.Vaadin7WidgetSet not found in project sources or resources.
    at org.codehaus.mojo.gwt.AbstractGwtModuleMojo.readModule(AbstractGwtModuleMojo.java:209)
    at org.codehaus.mojo.gwt.GwtModule.getLocalInherits(GwtModule.java:189)
    at org.codehaus.mojo.gwt.GwtModule.getInherits(GwtModule.java:149)
    at org.codehaus.mojo.gwt.GwtModule.getEntryPoints(GwtModule.java:114)
    at org.codehaus.mojo.gwt.shell.CompileMojo.compilationRequired(CompileMojo.java:615)
    ... 36 more

这已经是在正确的方向上迈出的一大步,这是导致 被自动删除的原因。看来我需要找出相关的依赖关系,并将其添加到pom.xml中(如果我理解正确的话)。

共有1个答案

夏侯臻
2023-03-14

好的,修好了。我看到有人将Vaadin7迁移到8并在widgetset上出现了一些问题:https://Vaadin.com/forum/#!/thread/15031831/15036434

而第一个答复(我在此引述)解决了我的问题:

嗨,很高兴知道您正在享受新版本:)检查以下内容:

  • 必须用vaadin-compatibility-server替换vaadin-server依赖项。
  • 如果您使用的是默认widgetset(您不是自己编译它):
    • vaadin-client-compility-client-compility依赖项替换为vaadin-client-compility
    • @widgetset(“com.vaadin.v7.vaadin7widgetset”)添加到UI实现中。
    • vaadin-compatibility-client替换vaadin-client依赖项。
    • 重新编译。

    因此,我在WidgetSet的pom.xml中使用vaadin-client更改了vaadin-compatibility-client,现在仍然保留了 -标记。

 类似资料:
  • 我有一个定义如下的表: 然后我有了这个继承的表: Hibernate在数据库中创建了两个表,但是当我试图在JPA上删除一个继承的对象时,它会返回外键约束违反错误,因为它试图删除第一个类。如何在删除超类时首先删除继承类,以避免键约束违反错误? 谢谢你。

  • 问题内容: 在关于反射的本教程中,它指出: […]因为泛型是通过类型擦除实现的,因此在编译过程中会删除有关泛型类型的所有信息 我的知识是使用泛型,以便在编译时编译器可以检查类型安全性。即失败快速方法。但是该链接提到类型擦除会在编译期间删除通用信息。 问题答案: 您引用的语句是正确的:编译器在编译过程中在内部使用通用类型信息,在处理源时会生成与类型相关的错误。然后,一旦完成验证,编译器将生成类型擦除

  • 问题内容: 我知道曾有人问过这个问题,但是在将其标记为重复之前,我想告诉您我的情况与在互联网上发现的情况有些不同。 我正在构建和嵌入脚本,人们可以将其放在自己的网站上。此脚本创建一个具有一定宽度/高度的div,并在其中包含一些信息。 我的问题是某些网站声明了div样式,这些样式也被我的div继承。 例如: 因此,如果我没有为div设置任何背景色,即使我不想要它也将显示为红色。 我唯一能采用的解决方

  • 在前面的标准编译安装中,第一步是./configure[30],它会根据Makefile.in生成Makefile文件,然后make根据Makefile自动编译软件 通常在一个源码包中,已经包含了configure脚本和Makefile文件,作为课外知识,我们大致了解一下怎么生成这两个文件 autoconf autoconf用来生成configure脚本,它可以检查系统特性、编译环境、环境变量、软

  • TL;DR 我引用的旧代码不符合 C 语言。令人惊讶的是,代码曾经有效。不能在构造函数和解构函数中调用虚拟方法。 我和一位同行讨论了C语言中的<code>virtual</code>关键字。在一个较旧的ubuntu操作系统上,我正在编写一个程序,该程序报告了调用“纯虚拟方法”的错误,这是不应该发生的 单步执行调试器后,我终于在继承的类上添加了 在告诉我的同龄人之前,我仔细检查了谷歌是否有任何可能表