当模块封装为pom时,在maven中跳过GWT编译

时间:2013-03-22 05:01:30

标签: gwt gwt-maven-plugin

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

我尝试将来自Validation sample的pom.xml中的打包标记从<packaging>war</packaging>更改为<packaging>pom</packaging>。 gwt-maven-plugin永远不会进入编译阶段。相反,它会跳过编译!!!!!

  1. What is happening?
  2. Is this expected?
  3. Is there any workaround?
  4. enter image description here

2 个答案:

答案 0 :(得分:3)

要将多个gwt编译的模块合并到一个.war文件中,使用maven-dependency-plugin

非常容易
  1. 将所有gwt示例打包为惯用(.war),如果您拥有私有maven回购,请安装mvn installmvn deploy
  2. 创建一个war类型的空maven模块,没有代码但是使用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>
    
  4. 最后与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>
    

    不幸的是,当包装是pom时,gwt-maven-plugin特别禁止编译,请查看line #269 of CompileMojo.java

答案 1 :(得分:1)

您可以将可重用模块(在评论中提及为 samples )创建为没有EntryPoint的单独GWT项目。将它们打包为jar,并将以下内容添加为resources

  1. 客户端源代码
  2. 最终编译所需的其他资源项(图像,xml文件等)
  3. 这样的事情:

    <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 packaging正在进行packageinstalldeploy阶段和

      

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

    您可以更改插件执行中的阶段,但我认为这样做有风险,因为您无法知道在package阶段到期时代码是否会被编译。