#java #gradle #intellij-idea #groovy
#java #gradle #intellij-идея #заводной
Вопрос:
Дополнение к вопросу:
Забыл упомянуть (потому что я изначально не считал это уместным), что srcDir
имя должно быть создано в архиве как вложенная папка для всего остального.
Итак, структура в завершенном архиве выглядит следующим образом:
srcDirName
aaa.class
bbb.class
ccc.class
propDirName
properties.txt
Следующий код является решением для создания структуры, но не отвечает на мой первоначальный вопрос, потому что это зависит от того, exclude
чтобы предотвратить включение нежелательных файлов propBaseDir
. Я до сих пор не мог найти решение, используя just into
without exclude
.
Спасибо Майклу Истеру за совет по использованию into
def srcDir = "build/classes/java/main/examples"
def srcDirName = "examples"
def propBaseDir = "src/main/java/examples"
def propDirName = "nls"
task deployAsJar(type: Jar) {
from {
files(srcDir) {
include "**/*" into srcDirName
}
}
from {
files(propBaseDir) {
exclude "*.java"
include "$propDirName/*"
}
}
archiveFileName = "examples.jar"
destinationDirectory = file("~")
}
Оригинальный вопрос
У меня есть эта задача Gradle, которая в основном делает то, что я хочу:
- все файлы в
srcDir
копируются, но неsrcDir
сам - все файлы в
propDir
копируются, включаяpropDir
самого себя
За исключением того, что все файлы в propBaseDir
(включая каталог в propDir
) также копируются, чего я не хочу.
Я знаю, что могу использовать exclude
для исключения файлов, но есть ли способ скопировать ТОЛЬКО propDir и его файлы в архив?
task deployAsJar(type: Jar) {
from {
files(srcDir) {
include "**/*"
}
}
from {
files(propBaseDir) {
include "$propDir/**"
}
}
archiveFileName = "examples.jar"
destinationDirectory = file("~")
}
Ответ №1:
Рабочий пример здесь.
(Редактировать: обновлено, чтобы отразить новую информацию в комментарии / OP. Обратите внимание, что я не уверен в более широкой цели, поэтому может быть более элегантное решение, чем использование deployAsJar
задачи.)
Рассмотрим:
project.ext.srcDirName = 'src'
project.ext.propDirName = 'props'
project.ext.srcDir = "${projectDir}/${srcDirName}"
project.ext.propBaseDir = "${projectDir}/base"
project.ext.propDir = "${propBaseDir}/${propDirName}"
task deployAsJar(type: Jar) {
from (srcDir) {
include "**/*" into srcDirName
}
from (propDir) {
include "**/*" into "${srcDirName}/${propDirName}"
}
archiveFileName = "examples.jar"
destinationDirectory = file(".")
}
Хитрость здесь заключается в использовании into
with from
для определения места назначения внутри архива, куда должны быть помещены файлы.
В моем примере репозитория это дает:
$ jar tf examples.jar
src/net/codetojoy/util/Util.java
src/net/codetojoy/Employee.java
src/props/abc/abc.properties
src/props/def/def.properties
Комментарии:
1. Спасибо за совет по использованию «into». Я забыл упомянуть, что srcDirName содержит все файлы в архиве, включая propDirName и файлы, которые он содержит. Я не могу найти решение, используя «into» для создания этой структуры.
2. @bigswifty я обновил ответ и репозиторий новой информацией. Обратите внимание, что могло бы быть что-то более элегантное, если бы вы объяснили общую цель. Например, использование
.class
файлов предполагает, что цель включает компиляцию, поэтому может быть способ сделать это с помощью настройки существующей задачи. (Тем не менее, я не могу больше тратить на это время.)3. Это сделало это. Еще раз спасибо.