2015-07-29 4 views
1

В настоящее время я работаю над переносом скрипта Ant в соответствующую версию Gradle. Все работает отлично, за исключением специальной задачи копирования, которая отвечает за копирование сгенерированного файла jar из build/libs в другой каталог (вне проекта).Custom Gradle «Копировать» задание копирует устаревшие классы

Если после первой сборки, я представлю изменения в любой файл Java и попытаться выполнить

gradle clean build deploy 

я вижу сборки/классы * .class файлы корректно обновляются, и сборки/ЛИЭС /template-util.jar. Тем не менее, файл template-util.jar, скопированный в/home/fbudassi/Downloads, имеет (большую часть времени) старую версию класса. Иногда, после некоторых изменений (я не знаю, где, потому что я пробовал много всего), скопированная банка обновляется правильно.

Это мой build.gradle:

apply plugin: 'java' 
apply plugin: 'eclipse' 

// Default task. 
defaultTasks 'deploy' 

// Configuration parameters. 
group = 'com.rcs.template' 
version = 'master' 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 

ext { 
    // Manifest extra parameters. 
    projectName = 'Template Util' 
    vendor = 'Rotterdam Community Solutions' 
    buildNumber = 10 
    jarName = 'template-util.jar' 

    // Dependencies versions. 
    jacksonVersion = '2.6.0' 

    // Deploy destinations. 
    deployTo = ['/home/fbudassi/Downloads'] 
} 

// Dependencies. 
dependencies { 
    compile "com.fasterxml.jackson.core:jackson-core:$jacksonVersion" 
    compile "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion" 
    compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion" 
    compile "org.slf4j:slf4j-api:1.7.12" 
    compile "org.apache.commons:commons-lang3:3.4" 

    testCompile 'junit:junit:4.12' 
} 

repositories { 
    mavenCentral() 
} 

// Jar name and Manifest data. 
jar { 
    def buildDate = new Date().format("MMMMM dd yyyy") 

    archiveName = jarName 
    manifest { 
    attributes 'Built-By': System.getProperty('user.name'), 
     'Built-Date': buildDate, 
     'Built-JDK': System.getProperty('java.version'),   
     'Implementation-Title': projectName, 
     'Implementation-Version': "$project.version - $buildDate - build: $buildNumber", 
     'Implementation-Vendor': vendor 
    } 
} 

// Deploy task: copy jar to destinations. 
task deploy(dependsOn: 'build') { 
    deployTo.each { dest -> 
     copy { 
      from jar 
      into dest 
     } 
    } 
} 

// Gradle Wrapper version. 
task wrapper(type: Wrapper) { 
    gradleVersion = '2.5' 
} 

Не могли бы вы помочь мне найти ответ на эту проблему?

ответ

1

вам необходимо выполнить операцию копирования во время фазы выполнения. быстрый фикс может поставить действие задачи в doLast блока:

// Deploy task: copy jar to destinations. 
task deploy(dependsOn: 'build') { 
    doLast { 
     deployTo.each { dest -> 
      copy { 
       from jar 
       into dest 
      } 
     } 
    } 
} 

в противном случае ваша операция копирования будет выполнена уже на этапе конфигурации (до создания нового банка) вот почему старый копируется. В общем, рекомендуется переключить свою установку, чтобы использовать несколько задач типа copy для развертывания. это позволяет также, что вы можете воспользоваться обновленной проверкой, которая не используется при выполнении простой операции копирования.

+0

Когда вы рекомендуете использовать несколько задач типа copy, вы имеете в виду, что я должен создать (в данном конкретном случае) две разные задачи «Копировать» для двух точек назначения в моем массиве 'deployTo'? Я имею в виду, что-то вроде того, что предложил Опан? –

1

Исключая тот факт, что банки развернут в фазе конфигурации (как писал Рене), вы можете использовать задачу типа Copy - DSL, Gradle Docs и выгоду от выходов и уточненный механизм:

task deploy(dependsOn: 'build', type: Copy) { 
    outputs.file(new File(dest) 

    from jar.outputs 
    into dest 
} 
+0

В вашем примере вы рассматриваете единственный dest. Не могли бы вы изменить его для работы с несколькими местами deployTo? (где deployTo - массив) –

Смежные вопросы