# Synchronize gradle projects with workspace failed due to an unexpected error

**URL:** <https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301>\
**Category:** Buildship\
**Tags:** issue-resolved, buildship, eclipse\
**Created:** [March 19, 2018, 9:06am UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301 "2018-03-19T09:06:30Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 19, 2018, 9:06am UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/1 "2018-03-19T09:06:30Z")

</div>

Hello, i have gradle 4.5.1, buildship 2.2, java 7 and tomcat 7.0.47. I could build project with buildship 2.2 and gradle 4.2 successfully. and make my local server up with tomcat 7.0.47.

But after upgrading to gradle 4.5.1. I can not make my local server up using tomcat, The error i was getting was:

```
`eclipse.buildId=4.6.3.M20170301-0400

```

java.version=1.8.0\_121  
java.vendor=Oracle Corporation  
BootLoader constants: OS=win32, ARCH=x86\_64, WS=win32, NL=en\_US  
Framework arguments: -product org.eclipse.epp.package.java.product  
Command-line arguments: -os win32 -ws win32 -arch x86\_64 -product org.eclipse.epp.package.java.product

org.eclipse.jdt.core  
Error  
Fri Mar 16 11:45:07 IST 2018  
Cannot nest output folder ‘sample/bin/main’ inside output folder ‘sample/bin’`

To remove this error i removed out kind entry from .classpath file of eclipse and i could run it successfully.  
Now to remove this i have added patch as:

```
if (classpathEntry.kind == 'output') {
                    if (classpathEntry.path == 'bin/default') {
                        entriesToBeRemoved << classpathEntry
                    }
                }

```

But now when refreshing project with buildship 2.2. I am getting below exception:

`synchronize gradle projects with workspace failed due to an unexpected error`  
`Cannot nest output folder 'sample/bin/main' inside output folder 'sample/bin'`  
`Java Model Exception: Java Model Status [Cannot nest output folder 'sample/bin/main' inside output folder 'sample/bin'] at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:786) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3102) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3064) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3076) at org.eclipse.jdt.internal.core.JavaProject.setOutputLocation(JavaProject.java:3023) at org.eclipse.buildship.core.workspace.internal.OutputLocationUpdater.update(OutputLocationUpdater.java:31) at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeJavaProjectInTransaction(SynchronizeGradleBuildOperation.java:244) 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:39) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:724) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5521) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5478) 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:2240) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2262) 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:55)`  
Can you please help?

---

<div class="post-metadata">

**Author:** ![donat](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/donat/32/7798_2.png) [@donat](https://discuss.gradle.org/u/donat)\
**Post date:** [March 19, 2018, 9:41am UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/2 "2018-03-19T09:41:06Z")

</div>

You should not remove the output folder from the list of classpath entries because then the default `<project_name>/bin` will be picked up. Can you try setting a custom value for the [`eclipse.classpath.defaultOutputDir`](https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html) property?

---

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 19, 2018, 1:49pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/3 "2018-03-19T13:49:42Z")

</div>

Thanks Donat. I resolved my problem

---

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 21, 2018, 12:32pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/4 "2018-03-21T12:32:07Z")

</div>

Hi Donat,  
New problem arose here. I am using rootProject.projectDir in my build.gradle which is giving me path till bin folder and i have changed default output folder to bin/main. Which is failing all existing code.

Can you suggest does gradle handle eclipse differently?

---

<div class="post-metadata">

**Author:** ![donat](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/donat/32/7798_2.png) [@donat](https://discuss.gradle.org/u/donat)\
**Post date:** [March 21, 2018, 12:51pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/5 "2018-03-21T12:51:03Z")

</div>

`bin/main` is the output folder for the main source set. How about using the default `bin/default` path?

---

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 21, 2018, 12:52pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/6 "2018-03-21T12:52:57Z")

</div>

> [@donat](#):
>
> How about using the default bin/default path

`bin/default` is not allowing tomcat plugin to start. tomcat plugin do not instantiate even.  
it is giving error as  
'eclipse.buildId=4.6.3.M20170301-0400  
java.version=1.8.0\_121  
java.vendor=Oracle Corporation  
BootLoader constants: OS=win32, ARCH=x86\_64, WS=win32, NL=en\_US  
Framework arguments: -product org.eclipse.epp.package.java.product  
Command-line arguments: -os win32 -ws win32 -arch x86\_64 -product org.eclipse.epp.package.java.product

org.eclipse.jdt.core  
Error  
Fri Mar 16 11:45:07 IST 2018  
Cannot nest output folder ‘sample/bin/main’ inside output folder ‘sample/bin’ ’

---

<div class="post-metadata">

**Author:** ![donat](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/donat/32/7798_2.png) [@donat](https://discuss.gradle.org/u/donat)\
**Post date:** [March 21, 2018, 1:07pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/7 "2018-03-21T13:07:59Z")

</div>

Ah, correct, I forgot that we started here. Still, I think you should be able to make your project work by:

- setting the default output dir to `bin`
- setting a separate output for each source folder: `sourceSetBin/main` and `sourceSetBin/test`.  
Or, you can try removing the output location from the source folders altogether, but it breaks the runtime classpath separation functionality (when you run a main() method or when you run a JUnit test from Eclipse).

---

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 21, 2018, 1:25pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/8 "2018-03-21T13:25:01Z")

</div>

setting the default output dir to bin:  
That i have done.  
setting a separate output for each source folder:  
Can you please tell how can i do this?

---

<div class="post-metadata">

**Author:** ![donat](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/donat/32/7798_2.png) [@donat](https://discuss.gradle.org/u/donat)\
**Post date:** [March 21, 2018, 1:45pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/9 "2018-03-21T13:45:13Z")

</div>

You can do something like this:

```gradle
apply plugin: 'java'
apply plugin: 'eclipse'

eclipse {
    classpath {
        file {
            whenMerged {
                def src = entries.find { it.path == 'src/main/java' }
                src.output = "/$eclipse.project.name/sourceSetBin/main"
            }
        }
    }
}

```

---

<div class="post-metadata">

**Author:** ![PunamPurohit](https://avatars.discourse-cdn.com/v4/letter/p/898d66/32.png) [@PunamPurohit](https://discuss.gradle.org/u/PunamPurohit)\
**Post date:** [March 21, 2018, 1:56pm UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/10 "2018-03-21T13:56:27Z")

</div>

> [@donat](#):
>
> src/main/java’

getting same error  
`Java Model Exception: Java Model Status [Cannot nest output folder 'sample/bin/main' inside output folder 'sample/bin']`

---

<div class="post-metadata">

**Author:** ![Solverj](https://avatars.discourse-cdn.com/v4/letter/s/bb73d2/32.png) [@Solverj](https://discuss.gradle.org/u/Solverj)\
**Post date:** [June 15, 2018, 9:03am UTC](https://discuss.gradle.org/t/synchronize-gradle-projects-with-workspace-failed-due-to-an-unexpected-error/26301/11 "2018-06-15T09:03:25Z")

</div>

An old issue, but try deleting all the eclipse related/directories within your project, e.g., .project, .classpath and .settings then re-import the project and it should work; had the same issue.
