Разница в зависимостях в Gradle и Maven - PullRequest
0 голосов
/ 19 сентября 2019

У меня вопрос относительно различия между механизмом зависимости Gradle и механизмом зависимости Maven:

Структура моего проекта следующая, а app зависит от common :

project
    common 
         conf
         src
            java
            test
    app 
         conf
         src
            java 
            test

и build.gradle в app :

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

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

Когда я использую ant dist .Пути к классам содержат папку / common / conf, которая содержит множество файлов конфигурации.Когда я использую Gradle build.Пути классов содержат build / common.jar вместо /common/conf.

Есть ли способ, которым я мог бы заставить Gradle делать то же самое, что и Maven (сделать пути классов содержащими / common / conf вместо build /common.jar)?

Поскольку приложение будет читать файлы конфигурации xml в папке common / conf, когда я запускаю тестовые примеры в приложении, но приложение не может прочитать XML из файла jar.Потому что сейчас мой код не может обрабатывать inputStream от Jar.

Используется ли оно:

res.getFile() 

, где res - ссылка на файлы конфигурации xml.

Я новичок в Maven и Gradle.Может ли кто-нибудь помочь, пожалуйста?Очень ценю!

1 Ответ

1 голос
/ 19 сентября 2019

Если вы пытаетесь добиться того, чтобы эти XML-файлы были доступны во время выполнения из Jar, просто добавьте ваши XML-файлы в /src/main/resources.

Все в этом каталоге автоматически добавляется в файл Jar и становится доступным в качестве ресурсов classpath.Как Maven, так и Gradle используют соглашение о конфигурации, где принято помещать ресурсы classpath в /src/main/resources, как это делается для помещения Java-кода приложения в /src/main/java, так и ресурсы classpath для модульного тестирования в /src/test/resources и код Java для модульного тестирования в /src/test/java.

Следование соглашениям Mavan / Gradle также упростит вашу настройку.В отличие от Ant, где все необходимо настроить.

Если ваши xml-файлы находятся в common.jar (путем помещения xml в common/src/main/resources, а common находится в пути к классам для for app тогда вы сможете прочитать эти файлы, загрузив их через загрузчик классов. Например: SomeClassFromCommon.class.getClassLoader().getResourceAsStream("somefile.xml")

...