GWT如何在编译器的类路径中获取继承模块

3

我有一个包含多个 GWT 模块的项目,其中之一是一个库模块,它没有入口点,其他模块从中继承。所有模块都包含在一个使用 Maven 和 gwt-maven-plugin 构建的项目中。不幸的是,构建项目失败,因为 gwt:compile 在编译继承它的主模块时,在类路径上寻找继承的模块。如何将库模块添加到主模块的编译类路径中?

3个回答

6
您需要进行一些创意的"Maven-ing",我刚刚编造了这个术语来描述它。(实际上可能根本不太有创意,但我自己也是Maven新手,所以它曾经让我困惑了一段时间)。
在某种程度上,您是正确的,GWT编译器确实正在寻找继承模块的源代码路径,当它尝试编译您的“主”模块时。为了实现这一点,您需要在主模块的pom文件中添加一个依赖项,指向库模块的源代码(仅限于编译阶段)。
像这样:
...
<artifactId>main-module</artifactId>
...
<dependency>
  <groupId>library-group</groupId>
  <artifactId>library-artifact</artifactId>
  <type>jar</type>
  <version>0.1-SNAPSHOT</version>
  <classifier>sources</classifier>
  <scope>compile</scope>
</dependency>
...

现在,你可以从不同的渠道获取这些源代码。如果你只是想在IDE(如Eclipse)中完成此操作,那么这可能已经足够了,因为m2eclipse插件足够智能,知道从哪里获取这些源代码(如果库模块也在你的工作区中)。如果这是你实际的构建过程,那么你需要修改库模块的pom文件,以生成-sources构件和标准的“library-artifact”一起使用。所以你最终会得到这两个东西:

library-artifact-0.1-SNAPSHOT.jar

并且

library-artifact-0.1-SNAPSHOT-sources.jar

希望现在您更清楚gwt-maven-plugin从那一点开始进行了。还有,这里我曾回答的另一个问题也可能会有所帮助:GWT项目结构

感谢您的回复。关于我们的情况,我想进一步澄清一下:我们确实在使用Eclipse,并且目前将我们的应用程序设置为单个Eclipse项目。在这个项目中,我们有几个GWT模块,组成了应用程序的不同区域。为其他模块继承共享资源,建立另一个没有入口点的模块是有意义的。我们认为这需要我们建立一个新的项目来依赖我们的应用程序,我想这就是您所描述的。但是,有没有一种方法可以在主项目中定位资源模块呢? - mreynolds0404
2
啊,我一开始错过了“单个项目”的部分。实际上,我正在描述一个独立的项目/构件。但是,您应该能够像在其他GWT模块之间设置继承关系一样完成它。在GWT模块A的gwt.xml中,您将有“<inherits name ='some.shared.package.ModuleB'/>”,其中Module B是您的共享GWT模块(具有gwt.xml文件,但如果您愿意,可以没有入口点)。现在,由于它们都在同一个Eclipse项目中,GWT编译器应该很容易找到B的源代码。您尝试打开Maven调试堆栈跟踪了吗(-X)? - Jason482
对我来说,这个答案中缺失的部分是如何创建这个源代码构件。只需按照此处描述的方式将maven-source-plugin添加到您的项目中即可:https://maven.apache.org/plugins/maven-source-plugin/usage.html - FLUXparticle

2

好的,我能够通过在项目的pom文件的gwt-maven-plugin配置中显示列出我的GWT模块来解决这个问题。 这样做,我能够强制执行GWT编译的顺序,确保共享模块首先编译并在其编译期间对继承它的其他模块可用。

以下是配置示例:

<configuration>
  <modules>
    <module>com.foo.gwt.shared.Shared</module>
    <module>com.foo.feature.one.gwt.One</module>
    <module>com.foo.feature.two.gwt.Two</module>
  </modules>
</configuration>

感谢Jason482提供的所有帮助。


0

我本来想评论上面的答案,但是我的声望还不够,所以我在这里发表我的发现。

Jason482的答案对我有用。添加以下内容:

<classifier>sources</classifier> <scope>compile</scope>

到我每个子模块的依赖中,在反应堆pom文件内部解决了我的问题。

mreynolds采用的解决方法是将GWT模块引用添加到主pom文件的gwt-maven-plugin配置中,似乎只有在GWT子模块中有其他入口点时才必要。对于我来说,这一步是不必要的,因为我没有其他入口点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接