【问题标题】:How to add libs from Maven Central etc. to an existing non-Gradle, non-Maven project in Eclipse如何将 Maven Central 等中的库添加到 Eclipse 中现有的非 Gradle、非 Maven 项目
【发布时间】:2014-10-12 08:20:35
【问题描述】:

我希望能够使用 Gradle(或类似的东西)从 Maven Central 等下载、添加和管理 3rd 方库,但不必使用 Gradle 构建(编译)我的项目。 (这是一个 Eclipse GWT 应用程序,我相信我需要保留我现有的 Eclipse GWT 插件构建过程以保留代码热插拔功能)。

我希望 jar 进入我的“WebContent/WEB-INF/lib”目录并添加到我的构建路径中,以便我可以立即开始使用这些库,即使它不是“Gradle 项目”。

这可能吗?如果有怎么办?

(我尝试将 build.gradle 添加到我的项目根目录,添加依赖项,然后从命令行调用“gradle build”。它说“BUILD SUCCESSFUL”(但显然 .jars 没有添加到我的项目的类路径等.),但就我目前为止,我不确定我是否走在正确的轨道上。当我尝试右键单击项目并调用 Gradle > 任务快速启动器时,它会显示“选定的项目不是 Gradle 项目”)。

【问题讨论】:

    标签: eclipse maven gwt gradle dependency-management


    【解决方案1】:

    您想要实现的目标是可能的,但绝对不应该如何使用 gradle。您应该使用 gradle war 插件(或者可能存在用于 GWT 项目的任何插件 - 机会非常高),但因为我不知道它如何(以及是否)与 GWT 无缝集成,eclipse-托管项目我不会推荐它。 幸运的是 gradle 是一个非常灵活的系统,它可以在不应用任何插件的情况下完成。

    以下脚本只是概念验证,但可以轻松扩展:

    repositories {
        mavenCentral()
    }
    
    configurations {
        eclipse 
        eclipseRt
    }
    
    dependencies {
        eclipse 'com.google.guava:guava:18.0'       
        eclipseRt 'javax.servlet:servlet-api:2.5'
    }
    
    task copyToWebInfLib(type: Copy) {
        from configurations.eclipse
        into 'WEB-INF/lib'
    }
    
    task modifyEclispeClasspath << {
        //here add dependencies from *both* configurations
        //to eclipse classpath
    }
    

    解释:

    首先,您需要添加适当的存储库,以保存所需的依赖项。您可以添加多个存储库。

    然后你需要定义两个配置(配置基本上是一个依赖集的名称)。为什么是两个?因为您需要提供开发和复制到WEB-INF/lib 所需的依赖项(例如guava)并且仅用于开发(例如servlet api - 由servlet 容器提供)。上面提到的War 插件会为您处理此问题(providedCompileprovidedRuntime 配置),但在这里您需要自己创建配置。您可以稍后更改名称。

    现在是 dependencies 块。在这里,您声明了您在项目中使用的依赖项,但请记住用适当的配置名称标记它们。

    最后,您需要一个任务(Copy 类型)来解决依赖关系 - 只有标有 eclipse(配置名称)的任务才会被复制到 WEB-INF/lib 文件夹中。第二个任务是修改适当的 eclipse 配置文件。由于我不是每天都使用 eclipse,所以我不知道如何修改文件。但是您只需要知道格式并可能使用XmlSlurper 添加适当的行,例如(AFAIK eclipse 文件以 XML 格式保存)。

    总的来说就是这样。随时提出其他问题。使用gradle wrapper 也是个好主意,但这是一个额外的步骤。

    【讨论】:

    • 这就是您要找的东西吗?
    • 是的,有点。我想我需要检查我的类路径是否已存在该条目,并删除旧版本等。所以我假设 Gradle 中没有任何自动功能?
    • 有一个 Eclipse 插件,但我不确定它是否适用于 GWT 项目,我想不是。我准备的其实是半自动的解决方案。您可以从类路径中删除所有依赖项并使用 gradle 准备它们。
    • 是的,但是我的项目有一些我手动添加的依赖 jar(因为它们没有在 Maven Central 等上发布,而且有些甚至没有在互联网上)。也许我可以使用 Gradle 中的“本地文件”选项(如果有的话)来管理这些,然后我可以删除所有并按照您的建议重写条目。我去查一下。
    • 是的,有这样的选项。例如:compile fileTree(dir: 'libs', include: ['*.jar'])
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多