5

我试图在另一场战争中重用组装好的 gwt 编译。为此,我尝试将当前 maven 模块的包装从war更改为pom. 然后我计划使用 maven-assembly-plugin 压缩 gwt 的模块 js 输出,然后在另一个 war 模块中使用它。

我尝试将包装标签从Validation sample<packaging>war</packaging><packaging>pom</packaging>的 pom.xml更改为。gwt-maven-plugin 从不进入编译。相反,它跳过了编译!!!!!!

  1. What is happening?
  2. Is this expected?
  3. Is there any workaround?

在此处输入图像描述

4

2 回答 2

4

要将多个 gwt 编译的模块连接到一个文件中,使用maven-dependency-plugin.war非常容易

  1. 将所有 gwt 示例打包为习惯 (.war),然后安装它们,mvn install或者mvn deploy如果您有私有 maven 存储库。
  2. 创建一个类型为 的空 maven 模块war,没有代码,但具有 maven 文件夹结构,您可以在此处放置所需的任何其他内容,例如全局src/main/webapp/index.html.
  3. 将新模块配置为使用maven-dependency-plugin如下所示的内容,然后运行mvn package

    <dependency>
        <groupId>my.group</groupId>
        <artifactId>example1</artifactId>
        <version>...</version>
        <type>war</type>
    </dependency>
    ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>unpack-gwt-examples</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>unpack-dependencies</goal>
          </goals>
          <configuration>
            <includeGroupIds>my.group</includeGroupIds>
            <includes>**/example1/**</includes>
            <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

最后,与 gwt-maven-plugin 相关,与任何其他 maven 插件一样,选择 pom-packaging 生命周期的适当阶段(打包、安装或部署)就足够了:

  ...
  <packaging>pom</packaging>
  ...
     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        ...
        <configuration>
        ...
        </configuration>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>compile</goal>
                </goals>
            </execution>
        </executions>
      </plugin>

不幸的是,gwt-maven-plugin 特别禁止在打包为 pom 时进行编译,请查看CompileMojo.java 的 #269 行

于 2013-03-22T14:22:14.237 回答
1

您可以将可重用模块(您在评论中作为示例提到)创建为没有入口点的单独 GWT 项目。将它们打包jar并添加以下内容作为资源

  1. 客户端源代码
  2. 最终编译所需的其他资源项(图像、xml 文件等)

像这样的东西:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            ...
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/services/**</include>
                <include>**/client/**</include>
                <include>**/public/**</include>
                <include>**/*.gwt.xml</include>
            </includes>
        </resource>
    </resources>
</build>

就是这样,您可以在任何其他 GWT 项目中重用它。pom.xml当您这样做时,您只需import*.gwt.xml.

至于 Maven 的行为,似乎是正确的。pom包装正在经历package和阶段installdeploy

默认情况下,编译目标配置为在“准备包”阶段执行,以尽可能晚地运行。

您可以更改插件执行的阶段,但我认为这是有风险的,因为您无法确切知道在该package阶段何时会编译您的代码。

于 2013-03-22T12:05:36.543 回答