代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

选择哪一个Maven2生命周期阶段?

  •  2
  • Christopher Klewes  · 技术社区  · 14 年前

    我有一个JavaEE Web应用程序,为了使用OC4J应用服务器来使用我的项目,它必须在我的构建生命周期中被修补以避免几个问题。实际上我是通过 maven-antrun-plugin 效果很好。我得把一些特殊的图书馆搬到 WEB-INF/lib 并编辑 web.xml ,以避免与EL函数和类加载问题冲突。

    根据 maven lifecycle phases 我选择了这个阶段 prepare-package :此阶段在 war 文件已打包,但不幸的是,(重新)源还未复制到临时工作目录中。我不喜欢处理源文件夹,因为它们受版本控制,我不想让我的同事意外地提交它们,因为构建工具修改了它们。

    所以Maven将所有(重新)源代码复制到 target/__finalName__ 因为这个文件夹是临时的,将被打包到war文件中。不幸的是,复制和打包是在生命周期中独立完成的。 package .

    那么,我如何才能在复制源和资源和真正的包装之间取得平衡呢?

    实例与 准备包装


    这个例子不起作用,因为 ${project.build.directory}/${build.finalName} 不存在,并且Ojdbc14.jar在此阶段没有复制到那里。

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.4</version>
      <executions>
        <execution>
          <id>patch-oc4j</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>run</goal>
          </goals>
          <configuration>
            <tasks>
             <echo>Patching distribution for OC4J</echo>
             <echo>Deleting the obsolete OJDBC library</echo>
             <delete file="${project.build.directory}/${build.finalName}
                           /WEB-INF/lib/ojdbc14.jar" />
             [... more patching ...]
            </tasks>
          </configuration>
        </execution>
      </executions>
    </plugin>
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   splash    14 年前

    你不能用个人资料吗?可能是这样的:

    <profiles>
      <profile>
        <id>oc4j</id>
        <dependencies>
          <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
            <scope>provided</scope>
          </dependency>
        </dependencies>
      </profile>
    </profiles>
    
        2
  •  0
  •   Tim    14 年前

    我必须删除一些特殊的库,将它们复制到WEB-INF/lib中,并编辑web.xml,以避免与EL函数和类加载问题发生冲突。

    听起来你至少可以用 Build Profiles 而是…你对上述问题的动机有点简短,但如果你详细说明,我们可以更好地判断这一点。