如何将Jar依赖项添加到Java Google App Engine项目?

时间:2014-02-23 14:41:12

标签: java google-app-engine ant intellij-idea

我正在尝试学习如何使用GAE,我想在我的项目中使用gson。

我正在使用intellij并使用ant构建(因为intellij似乎不喜欢构建GAE项目)。我已经成功构建,但现在我想使用gson。 Intellij识别导入,但是当我尝试构建时,我从ant获得以下错误:

“错误:包com.google.gson不存在”

我用Google搜索了这个问题,并建议将jar放入我已经完成的WEB-INF / lib中。但我仍然得到错误。我也试过使用maven依赖,但面临同样的问题。

我正在使用sdk / demos / template中提供的ant构建脚本。也许我需要在那里改变一些东西?

EDIT 我设法让它最终工作,ant文件不包括WEB-INF构建文件夹。这是ant中的新编译任务,我希望它可以帮助某人:)

<target name="compile"
      description="Compile the application servlet code">
<mkdir dir="${war.dir}/WEB-INF/classes"/>
<mkdir dir="${war.dir}/WEB-INF/lib"/>
<javac srcdir="src" destdir="${war.dir}/WEB-INF/classes">
  <classpath>
    <fileset dir="${appengine.sdk}/lib/user">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${appengine.sdk}/lib/shared">
      <include name="*.jar"/>
    </fileset>
      <fileset dir="src/WEB-INF/lib">
          <include name="*.jar"/>
      </fileset>
  </classpath>
</javac>
<copy todir="${war.dir}/WEB-INF/lib"
      flatten="true">
  <fileset dir="${appengine.sdk}/lib/user">
    <include name="**/*.jar" />
  </fileset>
    <fileset dir="src/WEB-INF/lib">
        <include name="*.jar" />
    </fileset>
</copy>

2 个答案:

答案 0 :(得分:2)

您需要将WEB_INF / lib添加到构建路径specified by the doc

<path id="project.classpath">
    <pathelement path="war/WEB-INF/classes" />
    <fileset dir="war/WEB-INF/lib">
      <include name="**/*.jar" />
    </fileset>
    <fileset dir="${sdk.dir}/lib">
      <include name="shared/**/*.jar" />
    </fileset>
  </path>

如果你不完全依赖于Intellij,我使用Eclipse plugin for GAE的确非常幸运。 (我知道;切换IDE“S ...”

答案 1 :(得分:1)

你所做的是一点点黑客攻击。理想情况下,您应该执行以下操作:

  • 在您的战争目录旁边(不在其中)创建第三方目录。在src / WEB-INF / lib中不需要有重复的WEB-INF目录。
  • 将您的Gson.jar添加到该目录,并从此处对其进行源代码控制。
  • 打开项目结构 - &gt;库 - &gt;新项目库 - &gt;来自Java
  • 选择你的罐子(或者第三方dir本身可能有用)。
  • 转到模块 - >依赖关系 - >添加库并选择新库
  • 转到工件 - >输出布局
  • 如果您的库尚未位于右侧窗格中,请执行“添加库文件”并选择新库
  • 您应该可以在右侧窗格中双击此库
  • 这会导致库在左窗格中显示为WEB-INF / lib /
  • 下的“<library name>(项目库)”

同时验证

  • 您的工件 - &gt;输出布局 - &gt;类型为Web应用程序:已爆炸
  • 您的工件 - &gt;输出布局 - &gt;输出目录是您的战争目录
  • 项目 - &gt;编译器输出是您的/ war / WEB-INF / classes目录

这样做会导致IntelliJ在构建时将Gson.jar移动到WEB-INF / lib目录。它还应该允许您在IntelliJ中构建项目,而无需在IDE之外运行ant。如果您有任何疑问或需要其他帮助,请与我们联系。我在过去的几个月里一直在与这些问题作斗争。