Gradle项目依赖项不引用快照jar

Gradle项目依赖项不引用快照jar,jar,gradle,dependencies,Jar,Gradle,Dependencies,我正在尝试在多项目Gradle构建中创建一个fat jar文件,如下所示: root +-- project1 +-- project2 project1提供了基本功能,project2随后使用这些功能创建一个可执行jar。可执行JAR需要包含依赖项中的所有代码,以便可以独立运行 对于外部依赖项,这很好。在project2中,我创建了一个新配置: apply plugin: 'maven' apply plugin: 'java' configurations { // conf

我正在尝试在多项目Gradle构建中创建一个fat jar文件,如下所示:

root
  +-- project1
  +-- project2
project1提供了基本功能,project2随后使用这些功能创建一个可执行jar。可执行JAR需要包含依赖项中的所有代码,以便可以独立运行

对于外部依赖项,这很好。在project2中,我创建了一个新配置:

apply plugin: 'maven'
apply plugin: 'java'

configurations {
  // configuration for JARs that need to be included in the final packaging
  includeInJar
}
然后添加依赖项:

dependencies {
  includeInJar 'com.fasterxml.jackson.core:jackson-databind:2.2.3'
  ...

  configurations.compile.extendsFrom(configurations.includeInJar)
}
包装如下所示:

jar {
  manifest {
    attributes "Main-Class": "com.acme.project1.MyTest"
  }
  // import all dependencies into the Jar so that it can be run easily
  from {
    configurations.includeInJar.collect {
      it.isDirectory() ? it : zipTree(it)
    }
  }
}
jar是使用外部依赖项中的所有文件正确构建的。问题来自项目对project1的依赖性:

includeInJar project(':project1')
当出现这种情况时,当它试图组装JAR时,会出现一个错误,即无法在project1
build/libs
目录中找到JAR(例如
project1-0.4.0.JAR
)。消息是正确的,因为project1构建了一个快照jar(例如,
project1-0.4.0-SNAPSHOT.jar

问题是,当项目构建快照jar时,为什么配置引用非快照jar?我可以更改什么以便找到正确的jar?

作为注释:


在我看来,fatjar不是一个伟大的模式。也许能满足你的需要?

我找到了我自己问题的答案

问题是,我们在项目级别有一些额外的脚本,这显然是在配置阶段结束时对版本进行了更改

组装fat jar配置时,使用“普通”版本。然后在构建JAR之前将其更改为-SNAPSHOT版本


将“代码>从{…}/<代码>代码导入到构建阶段,将其封装在<代码> DoFrSt{{}} /代码>中足以解决问题,尽管真正的修复显然是为了避免首先在中间改变版本。

FATJAR是目前我们的合理选择,但谢谢您的提示。