【问题标题】:Dependencies path difference in Gradle vs in MavenGradle 与 Maven 中的依赖关系路径差异
【发布时间】:2020-01-19 21:52:27
【问题描述】:

我有一个关于 Gradle 依赖机制与 Maven 依赖机制之间区别的问题:

我的项目结构如下,app 依赖于common

project
    common 
         conf
         src
            java
            test
    app 
         conf
         src
            java 
            test

app 中的 build.gradle 是:

dependencies {
    compile project(':common')
    ....
}
sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'conf'
        }
    }

    test {
        java {
            srcDir 'src/test'
        }
    }
}

当我使用 ant dist 时。类路径包含 /common/conf 文件夹,其中包含大量配置文件。 当我使用 Gradle 构建时。类路径包含 build/common.jar 而不是 /common/conf。

有没有办法让 Gradle 做和 Maven 一样的事情(让类路径包含 /common/conf 而不是 build/common.jar)?

因为当我在 app 下运行测试用例时,app 会读取 common/conf 文件夹下的 xml 配置文件,但 app 无法从 jar 文件中读取 xml。因为现在我的代码无法处理来自 Jar 的 inputStream。

是否使用:

res.getFile() 

其中 res 是对 xml 配置文件的引用。

我是 Maven 和 Gradle 的新手。有人可以帮忙吗?真的很感激!

【问题讨论】:

    标签: java maven gradle jar


    【解决方案1】:

    如果您想要实现的是在运行时从 Jar 中获得这些 xml 文件,那么只需将您的 XML 文件添加到 /src/main/resources

    该目录中的所有内容都会自动添加到 Jar 文件中,并可作为类路径资源使用。 Maven 和 Gradle 都使用约定优于配置,约定将类路径资源放入 /src/main/resources,就像将应用程序 Java 代码放入 /src/main/java 并在 /src/test/resources 中对类路径资源进行单元测试,在 @987654325 中进行单元测试一样@。

    遵循 Mavan/Gradle 约定也会使您的配置更简单。不像 Ant,一切都需要配置。

    如果您的 xml 文件位于 common.jar 中(通过将 xml 放在 common/src/main/resources 中,并且 common 位于 app 的类路径上,那么您应该能够通过类加载器读取这些文件。例如SomeClassFromCommon.class.getClassLoader().getResourceAsStream("somefile.xml")

    【讨论】:

    • 非常感谢您的帮助。这有助于我更好地理解底层!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多