GWT在编译器的类路径上获取继承的模块

时间:2011-05-20 14:55:51

标签: gwt maven

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

3 个答案:

答案 0 :(得分:5)

你需要做一些有创意的“Maven-ing”,因为我只是用这个术语来描述它。 (实际上它可能根本不具有创造性,但我自己就是一个Maven新手,所以它也让我感到困惑了一段时间。)

在某种意义上,你是正确的,GWT comipler 在尝试编译“main”模块时在类路径上查找继承模块的。要实现这一点,您需要在库模块的源上(主要用于编译阶段)向主模块的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-0.1-SNAPSHOT.jar

library-artifact-0.1-SNAPSHOT-sources.jar

希望gwt-maven-plugin如何从这一点开始更清楚。

几乎忘了,我在这里回答的另一个问题也可能有用:GWT Project Structure

答案 1 :(得分: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的所有帮助。

答案 2 :(得分:0)

我更愿意对上面的答案发表评论,但我没有足够的代表去做。所以我在这里发布我的发现。

Jason482的回答对我有用。添加:

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

我的每个子模块依赖项,在reactor pom内,解决了我的问题。

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