我有一个包含多个gwt模块的项目,其中一个是没有入口点的库模块,其他模块继承该入口点。所有模块都包含在使用maven和gwt-maven-plugin构建的单个项目中。不幸的是,构建项目失败是因为gwt:compile在编译继承它的主模块时在类路径上寻找继承的模块。如何在类路径上获取库模块以编译主模块?
答案 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子模块中有其他入口点时才需要。我没有,所以这一步对我来说没有必要。