【问题标题】:How to copy dependencies to gae war/WEB-INF/lib如何将依赖项复制到 gae war/WEB-INF/lib
【发布时间】:2011-03-26 05:02:00
【问题描述】:

我是从 Ant 的角度来的,所以请原谅我。我意识到这里已经有很多关于如何构建依赖项的问题,但似乎没有一个问题能说明如何做需要做的事情。

问题 1: 目前,结合使用 maven-war-plugin,当我运行 mvn war:war 时,它会在目标文件夹中创建一个 war 文件夹。

但是,我希望将所有依赖项的 jar 复制到由 google eclipse 插件设置的 war/WEB-INF/lib(启用 gae,禁用 gwt),而不覆盖 google eclipse 插件放置在那里的 jar。

我不想设置战争文件或战争目录。我只需要将所有非 gae jar 与 gae jar 复制/合并,这样当项目作为 gae web 应用程序运行时,Eclipse 就不会抱怨 ClassNotFoundException。

问题 2: 在 Eclipse 中使用 Ant 时,我可以在 Eclipse 中运行 Ant 目标。

现在,我必须从 shell 窗口执行 mvn 命令(这相互忽略了 Eclipse 会话的存在)。似乎唯一自动完成的事情是每当我更新依赖项时。

有没有一种方法或任何 Eclipse 插件可以让我在 Eclipse 中运行 mvn 目标?

其他信息

mvn dependency:copy-dependencies 坚持复制到target/dependency 目录,内容如下:

  <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>copy-dependencies</id>
        <phase>process-resources</phase>
        <goals>
          <goal>copy-dependencies</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/war/WEB-INF/lib/</outputDirectory>
          <overWriteReleases>false</overWriteReleases>
          <overWriteSnapshots>false</overWriteSnapshots>
          <overWriteIfNewer>true</overWriteIfNewer>
          <excludeArtifactIds>gwt-user,gwt-dev</excludeArtifactIds>
        </configuration>
      </execution>
    </executions>
  </plugin>

我什至尝试更改为绝对路径

<outputDirectory>
  /home/geek/eclipse/workspace/Demo-autoshoppe/holycow
</outputDirectory>

但是 Holycow 目录仍然是空的,mvn 仍然坚持复制到target/dependency 目录。我目前的解决方案是将target/dependency 软链接为war/WEB-INF/lib,这是一个非常非常糟糕的组合。为什么 maven 对 outputDirectory 规范不敏感?我正在使用 Ubuntu 的 maven 2.2。

【问题讨论】:

  • 请注意,m2e - Eclipse Maven 插件 - 在 Eclipse 3.8 中变得非常非常好。

标签: eclipse google-app-engine maven-2


【解决方案1】:

关于 #1:我建议基于此插件和原型 http://code.google.com/p/maven-gae-plugin/ 创建您的 maven 项目(如果您正在为 GAE 编写 GWT 应用程序,请参阅基于 GWT 的示例)。

关于 #2:查看 m2eclipse 插件以在 eclipse 中完全集成 maven。它是由 Sonatype(maven 的创建者)编写的:http://m2eclipse.sonatype.org/

【讨论】:

    【解决方案2】:

    一位同事通过电子邮件向我发送了这个有效的答案。触发跟进 mvn buildmvn package 但不是直接通过mvn dependency:copy-dependencies

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/war/WEB-INF/lib/</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
              <excludeArtifactIds>gwt-user,gwt-dev</excludeArtifactIds>
            </configuration>
          </execution>
        </executions>
      </plugin>
    

    【讨论】:

    • 这仍然顽固地将 jar 文件复制到目标/依赖项。然而,Steven Francolla 的 other solution below 有效。
    【解决方案3】:

    我有真正的答案给你,我的男人。

    使用“default-cli”执行 ID。确保您使用的是 Maven 2.2+。此 exec-id 适用于 mojo 的命令行执行。

      <build>
        <pluginManagement>
          <plugins>
            <!-- Copy dependencies to war/WEB-INF/lib for GAE proj compliance. -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-dependency-plugin</artifactId>
              <executions>
                <execution>
                  <id>default-cli</id>
                  <goals>
                    <goal>copy-dependencies</goal>
                  </goals>
                  <configuration>
                    <outputDirectory>${basedir}/war/WEB-INF/lib/</outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                    <excludeArtifactIds>gwt-user,gwt-dev</excludeArtifactIds>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    

    干杯。

    【讨论】:

    • 谢谢老兄...这个很管用...花了一天的时间来解决这个问题
    • 谢谢!最好只复制活动依赖项而不是过滤的依赖项(如果是相同的工件,不同的版本)
    猜你喜欢
    • 2011-04-23
    • 2015-02-28
    • 2012-09-10
    • 1970-01-01
    • 2018-02-24
    • 2012-04-22
    • 2014-04-23
    • 2011-06-25
    • 2011-05-15
    相关资源
    最近更新 更多