Java 基于命令行参数的条件依赖关系

Java 基于命令行参数的条件依赖关系,java,gradle,visual-studio-code,Java,Gradle,Visual Studio Code,不确定这是否是VSCode Java扩展问题。我们试图根据作为命令行参数传入的特定Spring引导配置文件,包含条件依赖项。当条件可以静态分析时,Java语言服务器似乎能够正确地提供intellisense,但当条件不能静态分析时,它就失败了。这里有一个例子,当我们使用true/false时,intellisense可以工作,但是当我们使用注释掉的行时,它不能工作。我想这是预期的行为,它仍然编译良好,我只是想知道是否有办法让它工作 def profiles=(project.hasPropert

不确定这是否是VSCode Java扩展问题。我们试图根据作为命令行参数传入的特定Spring引导配置文件,包含条件依赖项。当条件可以静态分析时,Java语言服务器似乎能够正确地提供intellisense,但当条件不能静态分析时,它就失败了。这里有一个例子,当我们使用true/false时,intellisense可以工作,但是当我们使用注释掉的行时,它不能工作。我想这是预期的行为,它仍然编译良好,我只是想知道是否有办法让它工作

def profiles=(project.hasProperty('profiles'))
?项目财产(“档案”)
:“本地,https”).split(“,”)
依赖关系{
//if(profiles.contains(“本地”)和&!profiles.contains(“tc”)){
if(false){
runtimeOnly“com.h2数据库:h2”
}
否则{
实现“org.postgresql:postgresql:$DB\u DRIVER\u VERSION”
//if(profiles.contains(“tc”)){
如果(真){
实现“org.testcontainers:postgresql:$testcontainers\u VERSION”
runtimeOnly“org.testcontainers:testcontainers:$testcontainers\u VERSION”
testCompile“org.testcontainers:junitjupiter:$testcontainers\u版本”
}
}
}
下面是一个测试文件中发生的情况的示例

//此导入因intellisense而失败,因为依赖关系为
//使用基于CLI参数的条件依赖项时不包括
导入org.testcontainers.junit.jupiter.testcontainers;
@简介(“tc”)
//@Testcontainers
公共类SampleIntegrationTest{

不过,我应该重申,在正常构建/运行期间,这不是问题,只是intellisense工作得不太好。

如果我理解正确,问题在于您没有在VS代码中获得自动完成和其他功能,对吗?“Spring引导配置文件我们作为命令行参数传入”Spring引导配置文件是字符串引导应用程序的一项功能,即它是您在运行时使用的,而不是构建时使用的。因此,Gradle构建脚本(我相信我们正在研究的)不应该/不能基于Spring引导配置文件。请重新考虑您正在做的事情,以及这是构建/部署选项还是运行时选项n、 @Andreas我想说这是运行时和构建时。如果我在运行时运行给定的配置文件,我需要确保该配置文件的依赖项在构建过程中包含。例如,在使用h2引导运行期间,不需要在存档中包含其他数据库驱动程序。另一个解决方案就是在bui中包含所有内容ld时间,以便我运行的任何配置文件都有它所需的内容,但这看起来像膨胀了,因此可以看看是否有其他方法。但我对其他方法持开放态度!@Code peedient,确切地说,但仅适用于假条件分支中的依赖项。这当然是有意义的,因为如果基于静态分析排除它们,则当它们不应该在intellisense中解析时。这只是我是否可以说服intellisense以任何方式将它们提供给我,以便在我键入
if时根据命令行参数包含的文件(p
,在
配置文件之后显示
配置文件。
包含的
也将显示在列表中供我选择。这就是intellisense对我的工作方式,你的意思是?