如何将依赖项复制到gae war / WEB-INF / lib

时间:2010-08-06 07:32:36

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

我是从Ant的角度出发的,所以请原谅我。我知道这里已经有很多关于maven依赖关系的问题了,但是他们似乎都没有告诉我们该怎么做。

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

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

我不想设置war文件或war目录。我只需要用gae jar复制/整合所有非gae罐子,这样当项目作为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。

3 个答案:

答案 0 :(得分:7)

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

使用“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>

干杯。

答案 1 :(得分: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>

答案 2 :(得分:0)

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

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