【问题标题】:How to specify dependency on tomcat libraries with gradle如何使用 gradle 指定对 tomcat 库的依赖
【发布时间】:2013-12-19 15:18:14
【问题描述】:

关于我的知识水平的一些背景知识:我目前正在尝试学习如何使用 gradle 构建项目。到目前为止,我对构建工具没有太多经验(几乎没有)。我确实了解总体思路,并且以前看过 ant 和 maven 文件,但我自己从未编写过它们。到目前为止,我只是使用其他人构建脚本或使用 Eclipse 配置我的构建。所以我可能在这里完全错误的轨道,如果是这样,请指出我正确的方向。 另外,很遗憾我没有太多手工制作罐子的经验。

我有一个想要编译成 jar 的 Eclipse 项目。所需的库 jar 在我的本地文件系统上。我设法通过

让 gradle 使用这些
dependencies {
    compile fileTree(dir:'lib', include:'*.jar')
}

此外,我在src/main/java 中有我的源文件,只需在build.gradle 文件中使用apply plugin: 'java'。据我所知,尝试使用gradle build 构建项目似乎是正确的。

但是,据我了解,该库应该用于在 tomcat 上运行的 web 项目中,并使用 tomcat 提供的一些库。例如。我正在使用javax.servlet.http.HttpServletRequest。 该项目在 Eclipse 中运行良好,但是我将 tomcat 库添加到了我的 Eclipse 构建路径中。当我签入 Eclipse 时,我可以看到 javax.servlet.http.HttpServletRequestservlet-api.jar 的一部分,它是 Tomcat 库的一部分。

现在,当我构建项目时,我得到构建错误,因为 java 编译器找不到类,因为我没有在依赖项中指定 servlet-api.jar。我想我可以以某种方式下载它(或学习如何将其指定为外部依赖项以使 gradle 从某个存储库下载它),但我不确定这是否正确。

有没有办法告诉 gradle 使用 Eclipse 使用的同一个库?或者其他一些通用的方式来告诉它所有的 tomcat jar,就像我可以简单地在 Eclipse 中添加完整的 Tomcat 库一样? 或者我是否真的需要这些 jar 的另一个副本并且必须单独指定每个?

另外,我是否需要将这些库 jar 添加到我的构建结果库 jar 中?据我所知,我还需要将我依赖的任何 jar 添加到生成的 jar 中。但是话又说回来,我在某处读到一些库是由 tomcat 本身提供的,因此它们必须成为部署在其上的任何战争的一部分。 恐怕,我对如何构建 jar-file 以在 war-file 中使用以部署在 上的组合感到困惑tomcat 使用 gradle 并且我不知道我的问题来自这些部分中的哪一个。我希望阅读本文的人可以帮助我理清思路并为我指明正确的方向,或者至少告诉我如何将 Tomcat 库中包含的 jar 添加到我的 gradle 依赖项中。

【问题讨论】:

    标签: java eclipse tomcat jar gradle


    【解决方案1】:

    使用 Gradle,无论何时添加文件或目录作为依赖项,它们都不会被视为完整的工件(带有组、名称和版本),而是包含类的简单文件。这意味着 Gradle 不会对它们执行任何冲突解决方案,或拉取传递依赖。

    对你来说,只是为了开始,我建议只添加 tomcat 依赖。确保它与 Eclipse 中的版本相同。

    apply plugin: 'war'
    
    repositories {
       mavenCentral()
    }
    
    dependencies {
        providedCompile 'org.apache.tomcat:tomcat-catalina:7.0.47'
    }
    

    另外,将Eclipse Integration Gradle 项目视为长期解决方案。

    【讨论】:

    • 感谢您让我更进一步。我首先尝试应用 java 插件,但像您一样指定了 tomcat 依赖项。这不起作用,因为没有war-lugin,依赖项似乎没有providedCompile 属性。但是,我不确定是否要创建一个战争文件。我只需要一个 jar 文件即可用作其他 Web 应用程序中的库。 Afaik,战争只是一个特殊的罐子。那么在这里构建一个战争并将其用作另一个应用程序中的库是否应该正常工作?
    • 当我使用 war-plugin 构建时,我得到了其他错误,因为缺少其他类(这是一个改进;-))。这次似乎缺少 JRE 系统库中的类。默认情况下,JRE 系统库不应该以某种方式包含在依赖项中吗?从某个存储库下载它只是为了使用一些在执行代码时始终存在的类似乎是错误的。
    • @JoachimKurz 你能用错误更新你的问题吗?应该包含 JRE 库,而不是在 WAR 中,而是在 JVM 类路径中。您似乎有一些一般性的错误配置问题。您是否尝试过创建新的 Tomcat 项目来重现该问题?
    • 玩了一会儿后,我发现只剩下一个错误,抱怨找不到@Nullable。由于我只在一个地方使用了该注释并且它不是真的需要我现在删除它并且它现在可以工作。我认为错误是由于 Eclipse 和 gradle 使用不同的 JRE 版本,但我没有更详细地研究它。
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多