【问题标题】:Eclipse error when using a gradle project使用 gradle 项目时出现 Eclipse 错误
【发布时间】:2018-10-31 16:56:09
【问题描述】:

我尝试在 Eclipse 中使用我的 gradle 项目,但出现以下错误

 Synchronize Gradle projects with workspace failed due to an unexpected error.
Cannot nest 'iC/src/java' inside 'iC'. To enable the nesting exclude 'src/' from 'iC'
Java Model Exception: Java Model Status [Cannot nest 'iC/src/java' inside 'iC'. To enable the nesting exclude 'src/' from 'iC']
    at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:798)
    at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3559)
    at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3519)
    at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3575)
    at org.eclipse.buildship.core.workspace.internal.SourceFolderUpdater.updateSourceFolders(SourceFolderUpdater.java:72)
    at org.eclipse.buildship.core.workspace.internal.SourceFolderUpdater.update(SourceFolderUpdater.java:174)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeJavaProjectInTransaction(SynchronizeGradleBuildOperation.java:245)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.access$200(SynchronizeGradleBuildOperation.java:99)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation$4.run(SynchronizeGradleBuildOperation.java:234)
    at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:41)
    at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2319)
    at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5736)
    at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5693)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeJavaProject(SynchronizeGradleBuildOperation.java:230)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeOpenWorkspaceProject(SynchronizeGradleBuildOperation.java:221)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeWorkspaceProject(SynchronizeGradleBuildOperation.java:186)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeGradleProjectWithWorkspaceProject(SynchronizeGradleBuildOperation.java:176)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.access$000(SynchronizeGradleBuildOperation.java:99)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation$1.run(SynchronizeGradleBuildOperation.java:134)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2314)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeProjectsWithWorkspace(SynchronizeGradleBuildOperation.java:131)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.run(SynchronizeGradleBuildOperation.java:115)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildsJob.synchronizeBuild(SynchronizeGradleBuildsJob.java:85)
    at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildsJob.runToolingApiJob(SynchronizeGradleBuildsJob.java:73)
    at org.eclipse.buildship.core.util.progress.ToolingApiJob$1.run(ToolingApiJob.java:73)
    at org.eclipse.buildship.core.util.progress.ToolingApiInvoker.invoke(ToolingApiInvoker.java:62)
    at org.eclipse.buildship.core.util.progress.ToolingApiJob.run(ToolingApiJob.java:70)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

我已将错误范围缩小到这段黑色代码

sourceSets{
    test {
        resources {
            srcDirs = [projectDir]
                ['.gradle','build.gradle','gradle','gradlew','gradlew.bat','bin','branding','compsciBuild','db','html','images','jsp','logs','META-INF','scripts','src','styles','theme','web','WEB-INF','build','.svn','reports'].each{excludes->
                exclude excludes
            }
        }
    }
}

我不知道必须重写该块才能让我的 junit 测试正常运行。如果我只包含

sourceSets.test.resources.srcDirs = ["${projectDir}/data"]

在我的 junit 日志中是以下内容

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autopilot' defined in URL [file:etc/applicationContext-parsing.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.compsci.ic.parser.rr.Autopilot]: Constructor threw exception; nested exception is java.io.FileNotFoundException: class path resource [data/autopilotCorpus] cannot be resolved to absolute file path because it does not exist

我知道我可以重写 junit 测试以更明确地说明他们在哪里寻找数据文件夹,但目前这不是一个选项,因为在我们做出切换之前,一些开发人员仍在使用 ant。

提前致谢。

文件夹结构如下

projectDir/src/java
projectDir/test/src/java
projectDir/data

* **更新 ***

我最终按照@M.Ricciuti 的建议解决了这个问题。我的最终工作代码如下所示

sourceSets{
    test {
        resources {
            srcDirs = [projectDir]
            ['.gradle/','build.gradle','gradle/','gradlew','gradlew.bat','bin/','branding/','compsciBuild/','db/','html/','images/','jsp/','logs/','META-INF/','scripts/','src/','styles/','theme/','web/','WEB-INF/','build/','.svn/','reports/', 'test/', '*.*', 'etc/', 'lib/', '.settings/'].each{excludes->
                exclude excludes
            }
        }
    }
}

【问题讨论】:

  • 您能简单描述一下您当前的项目目录结构吗? (java源和java测试源在哪里?你有一个父目录,测试资源文件所在的位置还是这些测试资源都在根项目目录中?)一个带有主文件夹的简单目录树会有所帮助。
  • 好的,我会在上面添加
  • 为避免这种“嵌套源目录”错误,您需要从 test resources SourceSets 中排除 srctest/src 目录:test { resources { srcDirs = [projectDir] ['src/', 'test/' /* other resources filters */].each{excludes-> exclude excludes } }。并且不要忘记尾随的 '/' 字符(您在排除项中添加了 'src',但需要编写 'src/' )
  • 确实有效,只是我的疏忽没有排除测试文件夹。谢谢
  • @M.Ricciuti 请将您的评论转化为答案。

标签: java eclipse gradle


【解决方案1】:

通过配置测试SourceSets“资源”目录,您使用了正确的方法使测试资源可用。

但是你的排除规则有两个小错误:

  • 您需要在排除目录列表中添加test目录
  • 您忘记了结尾的 '/' 字符(写 'src/' 而不是 'src')

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2014-12-07
    • 2015-09-08
    • 2020-08-12
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多