Задачи копирования в build.gradle не будут размещать зависимости компиляции в одном каталоге, а зависимости testCompile - в другом. - PullRequest
0 голосов
/ 30 января 2019

Я новичок в Gradle.

Когда я запускаю build , вместо копирования определенных зависимостей в определенные каталоги, сборка добавляет как compile , так и testCompile зависимости к src / test / resources .

Я хотел бы иметь возможность копировать только test скомпилировать зависимости в src / test / resources и все другие зависимости от main / src / resources .

Спасибо

apply plugin: 'java'
apply plugin: 'war'


String spring_version = "3.1.2.RELEASE@jar" ; 
String spring_sec_version = "3.1.2.RELEASE@jar" ; 
String hibernate_version = "4.1.7.Final@jar" ; 

repositories {
    mavenCentral()
}

//  "org.springframework:spring-oxm:"+spring_version,

List spring = [
    "org.springframework:spring-context:"+spring_version,
    "org.springframework:spring-beans:"+spring_version,
    "org.springframework:spring-core:"+spring_version,
    "org.springframework:spring-aop:"+spring_version,
    "org.springframework:spring-expression:"+spring_version,
    "org.springframework:spring-jdbc:"+spring_version,
    "org.springframework:spring-tx:"+spring_version,
    "org.springframework:spring-web:"+spring_version,
    "org.springframework:spring-webmvc:"+spring_version,
    "org.springframework:spring-orm:"+spring_version,
    "org.springframework:spring-asm:"+spring_version
] 

List spring_security = [
    "org.springframework.security:spring-security core:"+spring_sec_version,
    "org.springframework.security:spring-security-config:"+spring_sec_version,
    "org.springframework.security:spring-security-web:"+spring_sec_version
]

List spring_aop = [
    "aopalliance:aopalliance:1.0@jar",
    "cglib:cglib-nodep:2.2.2@jar"
]

List validation_lib = [
    "org.hibernate:hibernate-validator:4.3.0.Final@jar", 
    "javax.validation:validation-api:1.0.0.GA@jar"
]

List log_lib = [
    "org.jboss.logging:jboss-logging:3.1.2.GA@jar", 
    "org.slf4j:slf4j-api:1.6.6@jar",
    "org.slf4j:slf4j-jdk14:1.6.6@jar",
    "org.slf4j:log4j-over-slf4j:1.6.6@jar",
    "org.slf4j:jcl-over-slf4j:1.6.6@jar",
    "log4j:log4j:1.2.17@jar"
]

List hibernate_api = [
    "org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final@jar"
] 

List hibernate = [
    "org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.1.Final@jar",
    "org.hibernate.common:hibernate-commons-annotations:4.0.1.Final@jar",
    "org.javassist:javassist:3.16.1-GA",
    "org.hibernate:hibernate-entitymanager:"+hibernate_version,
    "org.hibernate:hibernate-core:"+hibernate_version
]

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.10'
    testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'
    compile hibernate_api
    compile hibernate
    compile spring 
    compile spring_security
    compile spring_aop
    compile "org.codehaus.jackson:jackson-jaxrs:1.9.9"  //lib jackson for JSON
    compile validation_lib
    compile log_lib
    runtime "postgresql:postgresql:9.1-901.jdbc4@jar"
    compile "rhino:js:1.7R2@jar"
}

task copyDependencies(type: Copy) {
    from (configurations.compile)
    into "src/main/resources"
}

task copyTestDependencies(type: Copy) {
    from (configurations.testCompile)
    into "src/test/resources"
}

build.dependsOn(copyDependencies)
build.dependsOn(copyTestDependencies)

1 Ответ

0 голосов
/ 30 января 2019

Прежде чем ответить на два вопроса:

  • Конфигурации Gradle compile и testCompile следует заменить на implementation и testImplementation.См. документацию для подробностей.Мой ответ будет использовать их вместо этого.
  • У Gradle отличный подход к уклонению от работы, который основан на вычислении входов / выходов.Копирование чего-либо в каталоги, которые являются входными данными задач, таких как каталоги resources, испортит это.Вы действительно должны избегать этого и вместо этого создавать новые каталоги, которые правильно подключены для использования там, где это необходимо.

Проблема, с которой вы столкнулись, заключается в том, что testImplementation расширяет implementation, и поэтому вы соберете оба runtime и тестируют зависимости в расположении для тестовых зависимостей.

  • Самый простой путь - создать пользовательскую конфигурацию для ваших тестовых зависимостей, чтобы вы моглиможет получить к ним доступ независимо от времени выполнения:

    configurations {
        testDependencies
        testImplementations {
            extendsFrom testDependencies
        }
    }
    
    dependencies {
        testDependencies group: 'junit', name: 'junit', version: '4.10'
        // And others
    }
    

    И затем вы скопируете содержимое testDependencies.

    Недостатком этого подхода является то, что разрешение testDependencies будетне должны зависеть от зависимостей runtime .Это может быть проблемой, но зависит от контекста.

  • Другой вариант - фильтровать зависимости runtime при копировании test .Это решение необходимо, если вы понимаете, что зависимости времени выполнения влияют на версию тестовых зависимостей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...