gradle:使用自定义结构部署jar:仅包含dir及其内容

zsbz8rwp  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(201)

问题补充:
忽略了提到(因为我一开始并不认为这是相关的) srcDir 名称需要在存档中创建,作为其他所有内容的封闭文件夹。
因此,完整档案中的结构如下所示:

srcDirName
  aaa.class
  bbb.class
  ccc.class
  propDirName
    properties.txt

下面的代码是创建结构的解决方案,但没有回答我最初的问题,因为它依赖于 exclude 阻止不需要的文件 propBaseDir 不被包括在内。到目前为止,我还没有找到一个解决方案,仅仅使用 into 没有 exclude .
感谢michael easter提供的使用 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` (包含dir to) `propDir` )也被复制了,我不想。
我知道我可以用 `exclude` 排除文件,但有没有办法只将propdir及其文件复制到存档中?

task deployAsJar(type: Jar) {
from {
files(srcDir) {
include "/*"
}
}
from {
files(propBaseDir) {
include "$propDir/
"
}
}
archiveFileName = "examples.jar"
destinationDirectory = file("~")
}

4c8rllxm

4c8rllxm1#

这里是工作示例。
(编辑:更新以反映评论/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(".")
}

这里的诀窍是 intofrom 在归档文件中标识文件应放置的目标位置。
在我的回购示例中,这将产生:

$ 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

相关问题