不存在的 JAR 的“IllegalStateException:没有文件或目录匹配”

Posted

技术标签:

【中文标题】不存在的 JAR 的“IllegalStateException:没有文件或目录匹配”【英文标题】:"IllegalStateException: No files nor directories matching" for non-existing JAR 【发布时间】:2017-03-03 14:16:44 【问题描述】:

我最近尝试将我的 Gradle 版本升级到 SonarQube 插件 2.2 并遇到以下错误:

Caused by: java.lang.IllegalStateException: No files nor directories matching '[/opt/bamboo-home/xml-data/build-dir/SPR-SONAR-JOB1/spring-core/build/libs/spring-cglib-repack-3.2.4.jar' in directory /opt/bamboo-home/xml-data/build-dir/SPR-SONAR-JOB1/spring-aop
 org.sonar.batch.scan.ProjectReactorBuilder.validateDirectories(ProjectReactorBuilder.java:302)
 org.sonar.batch.scan.ProjectReactorBuilder.loadChildProject(ProjectReactorBuilder.java:217)
 org.sonar.batch.scan.ProjectReactorBuilder.defineChildren(ProjectReactorBuilder.java:192)
 org.sonar.batch.scan.ProjectReactorBuilder.execute(ProjectReactorBuilder.java:116)
 org.sonar.batch.scan.ProjectScanContainer.projectBootstrap(ProjectScanContainer.java:120)
 org.sonar.batch.scan.ProjectScanContainer.doBeforeStart(ProjectScanContainer.java:98)
 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:91)
 org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
 org.sonar.batch.scan.ScanTask.scan(ScanTask.java:64)
 org.sonar.batch.scan.ScanTask.execute(ScanTask.java:51)
 org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:125)
 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
 org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
 org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:173)
 org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
 org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
 org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.executeOldVersion(BatchIsolatedLauncher.java:70)
 org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
 com.sun.proxy.$Proxy77.executeOldVersion(Unknown Source)
 org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:238)
 org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
 org.sonarqube.gradle.SonarQubeTask.run(SonarQubeTask.java:93)

这个spring-cglib-repack-3.2.4.jar 确实存在于spring-core/build/libs/ 文件夹中,因为我的构建是repackaging the cglib dependency 在custom jarjar task 中。

插件似乎正在spring-aop 文件夹下寻找该资源,因此出现异常。

请注意,相同的配置适用于 2.1 版本。

【问题讨论】:

这里有同样的问题。你有什么解决办法吗? 为什么文件丢失了?据我了解,您正在动态生成一些额外的 JAR 文件并将它们添加到编译类路径中。 SonarQube 需要这些 JAR 来执行分析。您的意思是相反的票:它过滤不存在​​的文件。所以我很惊讶它适用于 2.1 而不是 2.2。 刚刚测试到结帐大师。 ./gradlew sonarqube 工作正常。然后更新到 2.2 仍然可以正常工作。查看文件夹“spring-core/build/libs/”,JAR 存在。 让我再试一次并追踪我们自构建以来应用的更改。非常感谢您尝试重现该问题! 刚刚解决了这个问题,因为 jar 确实存在。我再次尝试使用 jdk8u102 和 jdk8u112 以及 sonarqube 4.5.6 和 5.2 的本地实例 - 仍然失败并出现相同的异常。请注意,这个问题也发生在我们的公共 CI 上。关于如何缩小问题根源的任何想法? 【参考方案1】:

我必须输入类文件的路径

sonar.java.binaries=target/

声纳项目.properties

声纳 6.2 版

【讨论】:

我不仅必须设置 sonar.java.binaries,而且必须将其设置为绝对路径才能使其工作。【参考方案2】:

已提交拉取请求以解决此问题。我已经创建了一张票并将发布一个错误修复: https://jira.sonarsource.com/browse/SONARGRADL-30

【讨论】:

请don't post identical answers to multiple questions。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答

以上是关于不存在的 JAR 的“IllegalStateException:没有文件或目录匹配”的主要内容,如果未能解决你的问题,请参考以下文章

不存在的 JAR 的“IllegalStateException:没有文件或目录匹配”

Spring boot - 抛出异常 jar 不存在

springcloud报springboot jar包不存在

springcloud报springboot jar包不存在

编译时本地jar包不存在

Cordova 5.3.3 cordovalib.jar 不存在