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

使用maven和新包装的GWT应用程序和GWT库的GWT CodeServer增量编译问题

柴磊
2023-03-14

我一直在玩弄gwt maven插件的最新变化。最值得注意的是,新包装的gwt应用程序和gwt库。

根据我的理解,如果我有一些代码,我想在不同的GWT应用程序之间重用,gwt-lib包所有需要的源代码和*.gwt.xml文件在所有类旁边的jar中。它像一个魅力。

如果我选择多模块maven reactor构建,那么在编译时就可以检测到所有内容,并且我能够顺利地构建和部署。但是,如果我尝试开发,闪亮的GWT2.7 SuperDevMode无法检测GWT lib项目中的更改,显然是因为它们是从JAR中引用的,而不是从更改它们的实际源目录中引用的。

为了说明这一点,我使用了Thomas Broyer的模块化requestfactory原型。

mvn archetype:generate \
   -DarchetypeCatalog=https://oss.sonatype.org/content/repositories/snapshots/ \
   -DarchetypeGroupId=net.ltgt.gwt.archetypes \
   -DarchetypeArtifactId=modular-requestfactorcom.testy \
   -DarchetypeVersion=1.0-SNAPSHOT

我输入了以下信息:

Define value for property 'artifactId': : mvngwt
Define value for property 'version':  1.0-SNAPSHOT: : 
Define value for property 'package':  com.test: : 
Define value for property 'module':  App: : MvngwtApp
Define value for property 'module-short-name':  mvngwtapp: : 

之后,我创建了一个名为“mvn-gwt-client-api”的附加maven模块,其中包含一个将由mvn-gwt-Client使用的类。末端结构看起来像这样:

mvngwt/
--mvngwt-client/
--mvngwt-client-api/
--mvngwt-server/
--mvngwt-shared/
--pom.xml

目标是能够编辑mvngwt-client-api中的文件(例如,当前唯一的类:MvngwtApi.java),然后在SuperDevMode中重新编译,并且实际上可以立即看到更改,而无需重新启动CodeServer。

可在以下位置找到项目的工作副本:https://github.com/elnicko/maven-gwt-test

PS:我试着用build helper maven插件解决这个问题:

<profiles>
        <profile>
            <!-- elnicko: add to support CodeServer hot compile for referenced libraries -->
            <id>env-dev</id>
            <activation>
                <property>
                    <name>env</name>
                    <value>dev</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>add-shared-sources-to-classpath</id>
                                <!-- 
                                <phase>process-classes</phase> 
                                <phase>compile</phase> 
                                -->
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>add-source</goal>
                                </goals>
                                <configuration>
                                    <sources>
                                        <source>${basedir}/../mvngwt-client-api/src/main/java</source>
                                    </sources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

然而,这并没有改善情况。

非常感谢任何提示/建议/想法。

编辑:

通过使用前面提到的构建助手maven插件配置,将mvngwt客户端api包从“gwt lib”更改为“jar”,并添加一个“maven源插件”,我能够使用SuperDevMode增量编译。这样maven编译和部署的工作方式是相同的,但是CodeServer知道mvngwt客户端api的源目录中的更改。尽管如此,问题仍然悬而未决,如何在不丢失CodeServer增量编译的情况下使用新的“gwt库”。可以在此处看到差异:https://github.com/elnicko/maven-gwt-test/compare/master...working_wihtout_gwt-lib_but_with_jar_packaging

共有1个答案

甘兴学
2023-03-14

你必须使用

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>mvngwt-client-api</artifactId>
  <version>${project.version}</version>
  <type>gwt-lib</type>
</dependency>

实际上,如果使用-X运行Maven,您将在日志中看到:

[DEBUG] Adding sources for com.test:mvngwt-client:gwt-app:1.0-SNAPSHOT
[DEBUG] Ignoring com.test:mvngwt-shared:jar:1.0-SNAPSHOT; neither a java-source, gwt-lib or jar:sources.
[DEBUG] Adding sources for com.test:mvngwt-shared:jar:1.0-SNAPSHOT
[DEBUG] Ignoring com.test:mvngwt-client-api:jar:1.0-SNAPSHOT; neither a java-source, gwt-lib or jar:sources.
[DEBUG] Ignoring com.google.gwt:gwt-user:jar:2.7.0; neither a java-source, gwt-lib or jar:sources.
[DEBUG] Ignoring com.google.gwt:gwt-dev:jar:2.7.0; neither a java-source, gwt-lib or jar:sources.
[DEBUG] Ignoring com.google.gwt:gwt-codeserver:jar:2.7.0; neither a java-source, gwt-lib or jar:sources.

也许这些应该在信息级别发出,而不是调试…

顺便说一句,你可以只使用一个,而不是build-helper-maven-plugin

 类似资料:
  • 我有一个配置了maven-surefire插件的根pom和一个配置了gwt-maven-plugin的gwt模块pom。升级到Maven 3后,我遇到了奇怪的错误。 该项目类似于此处描述的配置:将GwtTest测试与标准单元测试分开 和 它适用于maven 2,但与maven 3我得到: gwt插件似乎无法解析surefire插件的层次结构样式。 只有当我将gwt插件中的所有排除/包括设置为一个逗

  • 我试图运行GWT编译与maven通过插件:gwt-maven-plugin,但GWT模块包含在测试源路径,即:src/test/java。插件抱怨找不到GWT模块。 但是,当使用GWT类DevMode通过Eclipse启动文件使用该模块时,该模块工作良好。为什么gwt maven插件找不到gwt模块? 该项目包含2个Gwt模块,1个GwtTotalProd包含在主要来源中,一个GwtTotalTe

  • 我正在使用推荐的GWT Maven插件和GWT Eclipse插件。实际上,我正在使用带有的maven插件来尝试模拟旧的Google Eclipse插件超级开发模式。按照GWT Plugin留档中的Google App Engine说明和建议的示例项目gwt-basic-rpc-appEngine我创建了这个项目,当我从Eclipse启动App Engine本地服务器时(使用Eclipse Goo

  • 问题内容: 有谁知道使用maven和eclipse使用GWT的新2.0版本创建项目的好指南?我遇到了很多问题,无法让他们一起好好玩。 对于它的价值,我可以使用maven eclipse插件创建一个gwt项目,该插件可以正常工作,但是将其移植到maven则行不通(因此这方面的指南会很棒)。 同样,我可以使用Maven插件(gwt-maven- plugin),但是当我将其导入eclipse(导入->

  • 主要内容:GWT 应用程序调试 介绍, GWT 应用程序调试 示例GWT 应用程序调试 介绍 GWT 提供了出色的调试客户端和服务器端代码的能力。 在开发模式下,GWT 应用程序基于 Java 代码,不会转换为 JavaScript。 当应用程序在开发模式下运行时,Java 虚拟机 (JVM) 实际上将应用程序代码作为编译的 Java 字节码执行,使用 GWT 功能连接到浏览器窗口。 GWT 使用基于浏览器的插件连接到 JVM。 因此,开发人员可以自由地使用任何

  • 主要内容:GWT应用程序组成部分,模块描述符,公共资源,客户端代码,服务器端代码GWT应用程序组成部分 在我们开始使用 GWT 创建实际的“HelloWorld”应用程序之前,让我们看看 GWT 应用程序的实际部分包含哪些 : GWT 应用程序由以下四个重要部分组成,其中最后一部分是可选的,但前三部分是强制性的。 模块描述符 公共资源 客户端代码 服务端代码 典型 gwt 应用程序HelloWord不同部分的示例位置如下所示: 名称 描述 项目根目录 HelloWorld/