代码之家  ›  专栏  ›  技术社区  ›  Ed Dunn

使用gradle项目时发生Eclipse错误

  •  0
  • Ed Dunn  · 技术社区  · 7 年前

    我试图在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"]
    

    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
                }
            }
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   M.Ricciuti    7 年前

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

    但排除规则中有两个小错误:

    • 你需要加上 test
    • 您忘记了结尾的“/”字符(请写“src/”而不是“src”)