Bug 568965 - stop Indexer and run GC for maven sync
Change-Id: I219b19b36eba7f6b5fba5f73992511f646fba02a
Signed-off-by: Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/tasks/maven/SynchronizeMavenArtifact.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/tasks/maven/SynchronizeMavenArtifact.java
index c0cdb09..5e47dd4 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/tasks/maven/SynchronizeMavenArtifact.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/tasks/maven/SynchronizeMavenArtifact.java
@@ -54,6 +54,8 @@
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jdt.apt.core.util.AptConfig;
+import org.eclipse.jdt.internal.core.JavaModelManager;
+import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
import org.eclipse.tea.core.services.TaskingLog;
import org.eclipse.tea.library.build.config.BuildDirectories;
import org.eclipse.tea.library.build.config.TeaBuildConfig;
@@ -90,20 +92,41 @@
return;
}
- // close jar files providing Annotations, see
- // https://bugs.eclipse.org/565436
- AptConfig.setFactoryPath(null, AptConfig.getFactoryPath(null));
+ // Close jar files potentially in use by the Indexer:
+ // The Indexer actually leaves closing real files to finalization,
+ // see https://bugs.eclipse.org/567661
+ // and https://bugs.eclipse.org/406170
+ // Although discardJobs() does wait for the Indexer jobs to
+ // terminate, the resources may take a little longer to get ready
+ // for finalization. But instead of sleeping, we do something else.
+ IndexManager indexManager = JavaModelManager.getIndexManager();
+ indexManager.disable();
- ServiceLocator locator = createServiceLocator(log);
- RepositorySystem system = locator.getService(RepositorySystem.class);
- RepositorySystemSession session = createSession(log, system);
- List<RemoteRepository> remotes = createRemoteRepositories();
+ try {
+ indexManager.discardJobs(null);
- Collection<PluginBuild> pbs = wb.getSourcePlugIns();
- for (PluginBuild pb : pbs) {
- if (!pb.getMavenExternalJarDependencies().isEmpty() && !pb.getData().isBinary()) {
- runSingle(log, pb, system, session, remotes);
+ // close jar files providing Annotations, see
+ // https://bugs.eclipse.org/565436
+ AptConfig.setFactoryPath(null, AptConfig.getFactoryPath(null));
+
+ ServiceLocator locator = createServiceLocator(log);
+ RepositorySystem system = locator.getService(RepositorySystem.class);
+ RepositorySystemSession session = createSession(log, system);
+ List<RemoteRepository> remotes = createRemoteRepositories();
+
+ Collection<PluginBuild> pbs = wb.getSourcePlugIns();
+
+ // Try to close the Indexer's file handles now.
+ System.gc();
+ System.runFinalization();
+
+ for (PluginBuild pb : pbs) {
+ if (!pb.getMavenExternalJarDependencies().isEmpty() && !pb.getData().isBinary()) {
+ runSingle(log, pb, system, session, remotes);
+ }
}
+ } finally {
+ indexManager.enable();
}
}