java - Gradle 与 Maven 中的依赖路径差异

标签 java maven gradle jar

我有一个关于 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 的新手。有人可以帮忙吗?真的很感激!

最佳答案

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

该目录中的任何内容都会自动添加到 Jar 文件中并作为类路径资源使用。 Maven 和 Gradle 都使用约定优于配置,其中约定将类路径资源放入 /src/main/resources 中,就像将应用程序 Java 代码放入 /src/main/java/src/test/resources 中的单元测试类路径资源以及 /src/test/java 中的单元测试 Java 代码。

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

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

关于java - Gradle 与 Maven 中的依赖路径差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58001243/

相关文章:

java - 调试器中的 hashCode 值与 Netbeans 8.2 中的输出不同

java.lang.NoSuchFieldError : INSTANCE at org. jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.initializeCommon

java - 使用maven将第三方代码添加到具有依赖项的eclipse项目中?

java - 无法在多模块 Gradle 应用程序中 Autowiring HttpServletRequest

java - 在 threadPoolExecutor 中取消任务

Java 流 : Override return type of Collectors. 映射

JavaFx 在 Scollpane 中拖动 Shape

android - 无法访问继承的库

android - 错误:无法解析 ':app@debug/compileClasspath'的依赖项:无法下载okhttp.jar(com.squareup.okhttp3:okhttp:4.3.1)

android - 将字节码转换为 dex 时出错 : Cause: com. android.dex.DexException: