You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/02/01 17:07:01 UTC
svn commit: r617535 - in /ant/ivy/ivyde/trunk: CHANGES.txt
src/java/org/apache/ivyde/eclipse/IvyPlugin.java
src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
Author: xavier
Date: Fri Feb 1 08:06:57 2008
New Revision: 617535
URL: http://svn.apache.org/viewvc?rev=617535&view=rev
Log:
FIX: IvyDE resolve also evicted artifacts (IVYDE-76) (thanks to Nicolas Lalevée)
Modified:
ant/ivy/ivyde/trunk/CHANGES.txt
ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/IvyPlugin.java
ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
Modified: ant/ivy/ivyde/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/CHANGES.txt?rev=617535&r1=617534&r2=617535&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/CHANGES.txt (original)
+++ ant/ivy/ivyde/trunk/CHANGES.txt Fri Feb 1 08:06:57 2008
@@ -11,6 +11,7 @@
- IMPROVE: Support javadoc and sources even in modules where they are not declared (IVYDE-46)
- IMPROVE: Simplify the resolve process (IVYDE-64) (thanks to Nicolas Lalevée)
+- FIX: IvyDE resolve also evicted artifacts (IVYDE-76) (thanks to Nicolas Lalevée)
- FIX: IvyDE is using some internal classes of Eclipse (IVYDE-68) (thanks to Nicolas Lalevée)
- FIX: "Add Ivy library" not working in eclipse 3.3 (IVYDE-57)
- FIX: Automatic javadoc attachment is not working (IVYDE-55)
Modified: ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/IvyPlugin.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/IvyPlugin.java?rev=617535&r1=617534&r2=617535&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/IvyPlugin.java (original)
+++ ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/IvyPlugin.java Fri Feb 1 08:06:57 2008
@@ -406,6 +406,15 @@
resolve(project);
}
+ /**
+ * Check if the artifact is an artifact which can be added to the classpath container
+ *
+ * @param project
+ * the project containing the ivy container
+ * @param artifact
+ * the artifact to check
+ * @return <code>true</code> if the artifact can be added
+ */
public static boolean accept(IJavaProject project, Artifact artifact) {
return getAcceptedTypes(project).contains(artifact.getType())
&& !getSourcesTypes(project).contains(artifact.getType())
Modified: ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java?rev=617535&r1=617534&r2=617535&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java (original)
+++ ant/ivy/ivyde/trunk/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java Fri Feb 1 08:06:57 2008
@@ -9,10 +9,12 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.ivy.Ivy;
import org.apache.ivy.core.cache.DefaultRepositoryCacheManager;
@@ -27,6 +29,8 @@
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DefaultArtifact;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.module.id.ModuleId;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.report.ArtifactDownloadReport;
import org.apache.ivy.core.report.ResolveReport;
import org.apache.ivy.core.resolve.ResolveOptions;
@@ -218,7 +222,7 @@
+ " doesn't contain enough data: resolving again\n");
ResolveReport r = _ivy.resolve(ivyURL, new ResolveOptions()
.setConfs(_confs));
- all.addAll(Arrays.asList(r.getAllArtifactsReports()));
+ all.addAll(Arrays.asList(r.getArtifactsReports(null, false)));
confs = r.getConfigurations();
problemMessages.addAll(r.getAllProblemMessages());
maybeRetrieve(md, confs);
@@ -231,7 +235,8 @@
ResolveReport report = _ivy.resolve(ivyURL, new ResolveOptions()
.setConfs(_confs));
problemMessages = report.getAllProblemMessages();
- all = new LinkedHashSet(Arrays.asList(report.getAllArtifactsReports()));
+ all = new LinkedHashSet(Arrays.asList(report.getArtifactsReports(null,
+ false)));
confs = report.getConfigurations();
md = report.getModuleDescriptor();
@@ -243,6 +248,8 @@
maybeRetrieve(md, confs);
}
+ warnIfDuplicates(all);
+
classpathEntries[0] = artifacts2ClasspathEntries(all);
} catch (ParseException e) {
String errorMsg = "Error while parsing the ivy file " + _ivyXmlFile + "\n"
@@ -312,6 +319,53 @@
_job = null;
}
IvyPlugin.log(IStatus.INFO, "resolved dependencies of " + _ivyXmlFile, null);
+ }
+ }
+
+ /**
+ * Trigger a warn if there are duplicates entries due to configuration conflict.
+ * <p>
+ * TODO: the algorithm can be more clever and find which configuration are conflicting.
+ *
+ * @param all
+ * the resolved artifacts
+ */
+ private void warnIfDuplicates(Collection/* <ArtifactDownloadReport> */all) {
+ ArtifactDownloadReport[] reports = (ArtifactDownloadReport[]) all
+ .toArray(new ArtifactDownloadReport[all.size()]);
+ Set duplicates = new HashSet();
+ for (int i = 0; i < reports.length - 1; i++) {
+ if (IvyPlugin.accept(_javaProject, reports[i].getArtifact())) {
+ ModuleRevisionId mrid1 = reports[i].getArtifact().getModuleRevisionId();
+ for (int j = i + 1; j < reports.length; j++) {
+ if (IvyPlugin.accept(_javaProject, reports[j].getArtifact())) {
+ ModuleRevisionId mrid2 = reports[j].getArtifact().getModuleRevisionId();
+ if (mrid1.getModuleId().equals(mrid2.getModuleId()) && !mrid1.getRevision().equals(mrid2.getRevision())) {
+ duplicates.add(mrid1.getModuleId());
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (!duplicates.isEmpty()) {
+ StringBuffer buffer = new StringBuffer(
+ "There are some duplicates entries due to conflicts between the resolved configurations (");
+ for (int i = 0; i < _confs.length; i++) {
+ buffer.append(_confs[i]);
+ if (i < _confs.length - 1) {
+ buffer.append(", ");
+ }
+ }
+ buffer.append("):\n - ");
+ Iterator it = duplicates.iterator();
+ while (it.hasNext()) {
+ buffer.append(it.next());
+ if (it.hasNext()) {
+ buffer.append("\n - ");
+ }
+ }
+ _ivy.getLoggerEngine().log(buffer.toString(), Message.MSG_WARN);
}
}