我的应用程序被打包为ear,我使用了earlib和部署配置。但是对于所有这些依赖项,jar名称中都会提到版本。 例如,如果我提到如下的依赖关系,
earlib 'com.xyz:abc:1.0.1'
在生成的耳朵中,我可以看到jar名称为abc-1.0.1.jar,但我想将其简单地包含在abc.jar中。
答案 0 :(得分:1)
Gradle允许你declare a dependency without a version,但你必须定义一个dependency constraint,它基本上是你的依赖版本的定义。这通常用于大型项目:
dependencies {
implementation 'org.springframework:spring-web'
}
dependencies {
constraints {
implementation 'org.springframework:spring-web:5.0.2.RELEASE'
}
}
另一个选项是使用加号运算符declare a dynamic version。这允许您在打包应用程序时使用最新的依赖关系。这样做有潜在危险,因为它有可能破坏应用程序:
apply plugin: 'java-library'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework:spring-web:5.+'
}
如果您根本不想依赖二进制存储库而是自己提供依赖关系,则可以ant
,libs
和tools
目录declare a file dependency 。这允许您根据需要命名和版本依赖项,但您必须自己维护它们:
configurations {
antContrib
externalLibs
deploymentTools
}
dependencies {
antContrib files('ant/antcontrib.jar')
externalLibs files('libs/commons-lang.jar', 'libs/log4j.jar')
deploymentTools fileTree(dir: 'tools', include: '*.exe')
}
答案 1 :(得分:0)
注意我建议您不要删除版本,因为它们是应用程序无法运行时的重要诊断信息。
ear
任务是Ear
任务类型的一个实例,而后者基本上是标准Zip
任务类型的一种特殊形式。所有归档任务都允许您在文件打包时重命名。
例如,以下内容可能有效:
ear {
rename '(.+)-[^-].+(\\.jar)', '$1$2'
lib {
rename '(.+)-[^-].+(\\.jar)', '$1$2'
}
}
我强烈建议您查看Working with files上的新用户手册章节,了解有关复制和存档文件的更多信息。希望我能记得在Gradle 4.7退出后用非发布候选链接更新这个答案。
另外,如果您对该章有任何反馈,请告诉我。
编辑根据OP的反馈,我发现Ear
任务在earlib
配置中使用了JAR的子复制规范。子规范独立于主要规范和其他子规范,因此主rename()
不适用于earlib
文件。这就是我们通过rename()
块添加lib {}
的原因。