powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Философия Gradle?
20 сообщений из 20, страница 1 из 1
Философия Gradle?
    #39493313
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста в чем философия тасков в Gradle? После мавена никак не могу въехать.
Например делаю свой таск типа

Код: java
1.
2.
3.
4.
shadowJar {
println '!!! SHADOW JAR'
baseName = 'shadow'
}



Это таск предоствляется плагином и экстендит таск Jar.
Строку !!! SHADOW JAR я вижу во время конфигурации билда.
А как я должен запустить этот таск?
После вот этого определения сделать чтото типа

Код: java
1.
shadowJar.execute()

?

Спасибо
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493315
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustaceПодскажите пожалуйста в чем философия тасков в Gradle?
в возможности написать произвольный скрипт, делающий нечто, не предусмотренное базовым функционалом

aleks.eustaceА как я должен запустить этот таск?
google что ли не работает? можно например указать, что определенный стандартный task зависит от твоего и тогда он будет его выполнять сам каждый раз когда запускается. например у меня в проекте на андроиде есть такое

Код: javascript
1.
2.
3.
4.
5.
tasks.whenTaskAdded { task ->
    if (task.name =~ /generate.+ResValues/) {
        task.dependsOn generateValues
    }
}


здесь есть ряд "стандартных" тасков с именами (если не ошибаюсь) generateReleaseResValues и generateDebugResValues, и я указываю, что они зависят от моего плагина generateValues и запускают его на выполнение каждый раз, когда запускаются сами.

или такое (проект на яве)

Код: javascript
1.
processResources.dependsOn generateTranslations


принцип тот же, но я указываю напрямую имя стандартного таска и говорю, что он зависит от моего.


Буду удивлен, если не найдется еще двойки-тройки других способов сделать тоже самое
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493320
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Способов там больше чем надо. Но я как то после мавена представляю себе что есть предопределенные стадии который gradle проходит. Я делаю таск и должен как то указать что этот таск должен быть встроен где то между каким-то определенными шагами, типа того? То есть подход как в ant - есть например таск jar, который поставляет плагин java, и я указываю ему так
Код: java
1.
  jar.dependsOn shadowJar


Так как то?

Тут такой нюанс - этот самый shadowJar (его поставляет плагин com.github.jengelman.gradle.plugins:shadow:2.0.1),
так вот этот shadowJar екстендит Jar. В этом случае все равно надо писать

Код: java
1.
  jar.dependsOn shadowJar



?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493327
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustaceТут такой нюанс - этот самый shadowJar (его поставляет плагин com.github.jengelman.gradle.plugins:shadow:2.0.1),
так вот этот shadowJar екстендит Jar. В этом случае все равно надо писать

как насчет почитать документацию ?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493329
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати таски и напрямую можно исполнять как :module:task, но я документацию не читал, может он сам встраивается в lifecycle и выполняется вместо jar - я думаю в доке это есть, а если не в доке, так в гугле
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493332
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прежде чем задавать вопросы почитал документацию. Документация какая то левая.
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493334
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду документацию по самому Gradle :) В плане как именно запускаются таски которые добавляешь там явно не написано. Такое впечатление что все уже это знают и писать про это не надо :) Можете кинуть ссылку где написано четко о том как запускать свой собственный таск в цикле выполнения билда?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493341
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustaceЭто таск предоствляется плагином и экстендит таск Jar.Если вам нужно заместить стандартную задачу своей, то примерно так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class MyJar extends Jar {

}

subprojects {
    apply plugin: 'java'

    task myJar(type: MyJar) {
        doLast {
            println "Hello, world!"
        }
    }

    myJar.setDependsOn(jar.dependsOn)
    jar.deleteAllActions()
    jar.setDependsOn([myJar])
    jar.enabled = false

}
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493346
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Андрей.
То есть
1) я создаю свой таск MyTask

Код: java
1.
class MyJar extends Jar {}



2) конфигурирую свой таск для всех подпроектов- переопределяю метод doLast()

Код: java
1.
2.
3.
4.
5.
 task myJar(type: MyJar) {
        doLast {
            println "Hello, world!"
        }
    }



Таким образом Gradle на своем шаге когда он должен вызвать Jar.doLast() вызовет вместо этого myJar.doLast() - причем в каждом подпроекте.

3) Далее конфигурирую зависимость
Код: java
1.
myJar.setDependsOn(jar.dependsOn)



То есть таск myJar будет зависеть от таска jar - и зачем, если мы вроде уже заменили этот таск jar на мой myJar? Или я чтото не понял?

4) И что тут делается и для чего - объясните пожалуйста

Код: java
1.
2.
3.
 jar.deleteAllActions()
    jar.setDependsOn([myJar])
    jar.enabled = false
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493351
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustace,

есть два варианта:
написать что вы в действительности хотите получить на выходе и надеятся что кто-то здесь (или где-то еще) подскажет

прочесть книжку (это долго и тоскливо, потому как ее начало мало коррелирует с практикой, а хочется получить результат здесь и сейчас)

то что я написал - это ответ на изначальный вопрос ("какой-то плагин расширяет базовый Jar и создает новую задачу, как выполнить эту задачу при сборке"), здесь вы возможно термины не те употребляете, поэтому взаимопонимания нет, однако если я вижу что раз какая-то задача расширяет базовую, то наверное базовую при сборке выполнять не нужно, в гредле это достигается в несколько шагов:

добавить в новую задачу зависимости старой

поставить в зависимости старой задачи новую

выключить старую задачу (удалить нельзя, точнее геморройно, от нее же тоже что-то зависит)

Однако я не исключаю тот факт, что единственное что вы хотите - это просто выполнить какие-то действия до сборки jar или сразу после (ну вот вообще не вижу смысла расширять jar), это делается так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
subprojects {
    apply plugin: 'java'

    jar {
        doFirst {
            println "before"
        }
        doLast {
            println "after"
        }
    }

}
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493411
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustaceТакое впечатление что все уже это знают и писать про это не надо :)
лично я (и возможно так же поступает большинство) концентрируются на конкретных плагинах и конкретных задачах, а не теории - конечно не плохо понимать в целом как это работает, но нету ни времени ни желания становиться гуру грэдла. гредл система гибкая - одно и то же делается массой способов. у тебя я так понимаю конкретный плагин, вот с ним нужно и разбираться, читать его доку, гуглить по его использованию.

aleks.eustaceМожете кинуть ссылку где написано четко о том как запускать свой собственный таск в цикле выполнения билда?
я же приводил примеры - делаешь один из стандартных для билдов тасков зависимым от своего. не случайный конечно, а тот, который на нужном этапе выполняется
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493478
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения, немного проясняется. Ну как бы тут такое дело в плане понимания общей концепции - я например делаю таск

Код: java
1.
2.
3.
4.
5.
task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}



запускаю команду
Код: java
1.
gradle build -i 


а gradle вообще не замечает мой таск. И я в ступоре - то есть я не понимаю вообще получается концепции как оно работает.
Вот кстати в этом примере - если я extends Jar - должен мой таск запуститься по команде gradle build без всяких дополнительных манипуляций?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493480
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется уже обсуждали вверху - не должен :)
То есть я делаю как то так

Код: java
1.
2.
3.
4.
5.
task FatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}



и добавляю дальше конфиги

Код: java
1.
2.
3.
4.
fatJar.setDependsOn(jar.dependsOn)
    jar.deleteAllActions()
    jar.setDependsOn([fatJar])
    fatJar.enabled = false



а потом явно создаю инстанц моего таска и зачем-то вызываю метод doLast()

Код: java
1.
2.
3.
4.
5.
task fatJar(type: FatJar) {
        doLast {
            println "Hello, world!"
        }
    }
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493481
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати вот пример кода - тут просто определяется таск
Код: java
1.
fatJar (type : Jar)


и больше никаких команд на этот счет
https://www.mkyong.com/gradle/gradle-create-a-jar-file-with-dependencies/
А потом просто запускается
Код: java
1.
gradle fatJar


Получается что при такой команде все этапы, предопределенные плагином Java, пройдут, так как fatJat extends Jar - так как-то?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493510
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustace,

если вам на выходе нужны оба jar (обычный и fat), то:

Код: java
1.
2.
    fatJar.dependsOn jar
    assemble.dependsOn fatJar



если только один (fat), то достаточно только jar переопределить:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    jar {
        manifest {
            attributes 'Implementation-Title': 'Gradle Jar File Example',
                    'Main-Class': 'com.mkyong.DateUtils'
        }
        baseName = project.name + '-all'
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    }
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493918
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Еще Gradle полон магических слов.
Где брать по ним информацию?
Например пимер этого блока в нете такой

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
jar {
  manifest {
    attributes 'Implementation-Title': 'Gradle Jar File Example',
            'Main-Class': 'com.mkyong.DateUtils'
  }
  baseName = project.name + '-all'
  from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
  with jar
}



И что такое
Код: java
1.
with jar

- как узнать? Поиском в гугле?
...
Рейтинг: 0 / 0
Философия Gradle?
    #39493951
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Философия Gradle?
    #39494554
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там есть
Код: java
1.
with(sourceSpecs)	Adds the given specs as a child of this spec.


А sourceSpecs - это имеется ввиду слово 'jar'? Почему 'jar' :)
...
Рейтинг: 0 / 0
Философия Gradle?
    #39494790
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks.eustaceТам есть
Код: java
1.
with(sourceSpecs)	Adds the given specs as a child of this spec.


А sourceSpecs - это имеется ввиду слово 'jar'? Почему 'jar' :)

sourceSpecs - это экземпляр org.gradle.api.file.CopySpec, коим задача jar является.
...
Рейтинг: 0 / 0
Философия Gradle?
    #39498378
aleks.eustace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Философия Gradle?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]