diff --git a/maven/src/org/netbeans/modules/maven/cos/CosChecker.java b/maven/src/org/netbeans/modules/maven/cos/CosChecker.java --- a/maven/src/org/netbeans/modules/maven/cos/CosChecker.java +++ b/maven/src/org/netbeans/modules/maven/cos/CosChecker.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -58,6 +59,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.maven.model.Build; @@ -71,6 +73,8 @@ import org.netbeans.modules.maven.api.execute.PrerequisitesChecker; import org.netbeans.modules.maven.api.execute.RunConfig; import org.netbeans.api.java.project.runner.JavaRunner; +import org.netbeans.api.java.queries.BinaryForSourceQuery; +import org.netbeans.api.java.queries.SourceForBinaryQuery; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; @@ -565,8 +569,37 @@ executePaths.add(cp); } } + ClassPath exec = ClassPathSupport.createProxyClassPath(executePaths.toArray(new ClassPath[executePaths.size()])); + Set toClean = new TreeSet(); + for (ClassPath.Entry entry : exec.entries()) { + SourceForBinaryQuery.Result2 result = SourceForBinaryQuery.findSourceRoots2(entry.getURL()); + if (result.preferSources()) { + for (FileObject src : result.getRoots()) { + for (URL bin : BinaryForSourceQuery.findBinaryRoots(src.getURL()).getRoots()) { + if (!"file".equals(bin.getProtocol())) { + continue; + } + File root; + try { + root = new File(bin.toURI()); + } catch (URISyntaxException x) { + throw new IOException(x); + } + boolean found = new File(root, NB_COS).isFile(); + if (found) { + toClean.add(root); + } + Logger.getLogger(CosChecker.class.getName()).log(Level.FINE, "found in {0}? {1}", new Object[] {root, found}); + } + } + } + } + Logger.getLogger(CosChecker.class.getName()).log(Level.FINE, "Cleaning NetBeans-generated class files from {0}", toClean); + if (toClean.isEmpty()) { + return; + } int res = JavaRunner.execute(JavaRunner.QUICK_CLEAN, Collections.singletonMap( - JavaRunner.PROP_EXECUTE_CLASSPATH, ClassPathSupport.createProxyClassPath(executePaths.toArray(new ClassPath[0])))). + JavaRunner.PROP_EXECUTE_CLASSPATH, exec)). result(); if (res != 0) { throw new IOException("Failed to clean NetBeans-generated classes");