From 2a60087d2cd15b8c1bd6eabfda24e3533bed933e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Sat, 7 Sep 2013 11:10:26 +0200 Subject: [PATCH 1/2] Bump tycho version to 0.18.1, use m2e 1.5 Signed-off-by: Fred Bricon --- pom.xml | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 50f55c8..414ee63 100644 --- a/pom.xml +++ b/pom.xml @@ -26,8 +26,10 @@ pom + 0.18.1 m2eclipse-tycho Tycho Project Configurators Update Site + -Xmx800m -XX:MaxPermSize=256m @@ -40,7 +42,7 @@ m2e-tests - http://repository.tesla.io:8081/nexus/content/sites/m2e.extras/m2e/1.4.0/N/LATEST/ + http://repository.tesla.io:8081/nexus/content/sites/m2e.extras/m2e/1.5.0/N/LATEST/ p2 @@ -90,19 +92,6 @@ - - sun-jvm - - - java.vendor.url - http://java.sun.com/ - - - - -Xmx800m -XX:MaxPermSize=256m - - - osx From 531a244c56a57a564d8e05b25392fb9d2961e60b Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Sat, 7 Sep 2013 11:15:38 +0200 Subject: [PATCH 2/2] Fix disappearing classpath entries on project update The new test case couldn't reproduce the issue, but at least can serve as a non-regression test for the future. New implementation works anyway (smoke tested) and all existing tests pass. Signed-off-by: Fred Bricon --- .../projects/local-jar-classpath/.classpath | 8 +++++ .../projects/local-jar-classpath/.gitignore | 6 ++++ .../projects/local-jar-classpath/.project | 7 ++++ .../local-jar-classpath/META-INF/MANIFEST.MF | 8 +++++ .../local-jar-classpath/build.properties | 6 ++++ .../lib/local-jar-classpath.jar | Bin 0 -> 714 bytes .../projects/local-jar-classpath/plugin.xml | 4 +++ .../projects/local-jar-classpath/pom.xml | 22 ++++++++++++ .../src/main/java/pde/Activator.java | 6 ++++ .../internal/TychoLifecycleMappingTest.java | 33 ++++++++++++++++++ .../tycho/m2e/internal/PDEProjectHelper.java | 9 +++-- 11 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.classpath create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.gitignore create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.project create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/META-INF/MANIFEST.MF create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/build.properties create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/lib/local-jar-classpath.jar create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/plugin.xml create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/pom.xml create mode 100644 org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/src/main/java/pde/Activator.java diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.classpath b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.classpath new file mode 100644 index 0000000..fbf9b7c --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.gitignore b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.gitignore new file mode 100644 index 0000000..e866e7f --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.gitignore @@ -0,0 +1,6 @@ +/target +/workspaceState.ser +/bin +!.project +!.classpath +!.settings/ \ No newline at end of file diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.project b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.project new file mode 100644 index 0000000..0d536d3 --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/.project @@ -0,0 +1,7 @@ + + + local-jar-classpath + + + + diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/META-INF/MANIFEST.MF b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/META-INF/MANIFEST.MF new file mode 100644 index 0000000..c930192 --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/META-INF/MANIFEST.MF @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: local-jar-classpath +Bundle-SymbolicName: local-jar-classpath;singleton:=true +Bundle-Version: 0.0.1.qualifier +Bundle-Vendor: fred +Bundle-ClassPath: ., + lib/local-jar-classpath.jar diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/build.properties b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/build.properties new file mode 100644 index 0000000..e83aaaf --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/build.properties @@ -0,0 +1,6 @@ +source.. = src/main/java/ +output.. = target/classes/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + lib/local-jar-classpath.jar diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/lib/local-jar-classpath.jar b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/lib/local-jar-classpath.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc4e59d64d51375eee7821bb5051f0f7aa5de60e GIT binary patch literal 714 zcmWIWW@Zs#;Nak3nAV}@%zy+$7+4s5T|*poJ^kGDeI5Ng-CTo1^nBg^onm14?0e?4 zkGHPgMP6@Rt#fD2Zw@lJV*KFgqo+&^0p9E!o9da~Ndt|N1mXa=1!`y(hy!KQ^7HkR z5{vYM^K(<3a}tY-^^!qks^4zE!wv#-z6#4cmiWQ6%VFZ=4985JrJEKQ6xEwef1-0+ z{U+ak*H)K_{3qO9Bc)vquQS=b*?RTO$1i^~JP_Q--(9fR&`o5M@XXARpws)lKNNW6 zRp$|Sx=cH++iNQG!Rl*k<-%C13+D^ZIkIOpgPET5jt?B4L$<$4y)Uw=da~J_5Ue}4ghpjvzzsGUTo0Bh$g@xJgwCl&z z6eTMrd|9@zS2FpB@`EbVx$cv*>exU5a#~M(#u=b@c^L5ph#1xY$x19s)b{W>=jY=e z>T&w~b#E`7P0xTqt)=06>ZDJY$2m_Oy)ce*=Y31rHm`Cl+PWtO90!7LR{H1z4KxPg z0B=Sn5e7swBgYRYno$9+NJlmW6qm@J0>vc)Bm$W@Viw&HWM_i>j{rr$u);J16dD2E TtZX24%s_Y^NIwOtWMBXQXT#J% literal 0 HcmV?d00001 diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/plugin.xml b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/plugin.xml new file mode 100644 index 0000000..f422d55 --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/plugin.xml @@ -0,0 +1,4 @@ + + + + diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/pom.xml b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/pom.xml new file mode 100644 index 0000000..5b70dc2 --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + foo.bar + local-jar-classpath + 0.0.1-SNAPSHOT + eclipse-plugin + + 0.12.0 + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + + \ No newline at end of file diff --git a/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/src/main/java/pde/Activator.java b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/src/main/java/pde/Activator.java new file mode 100644 index 0000000..00099ed --- /dev/null +++ b/org.sonatype.tycho.m2e.tests/projects/local-jar-classpath/src/main/java/pde/Activator.java @@ -0,0 +1,6 @@ +package pde; + +import foo.bar.SomeClass; + +public class Activator extends SomeClass { +} diff --git a/org.sonatype.tycho.m2e.tests/src/org/sonatype/tycho/m2e/internal/TychoLifecycleMappingTest.java b/org.sonatype.tycho.m2e.tests/src/org/sonatype/tycho/m2e/internal/TychoLifecycleMappingTest.java index ac9f494..a7aa0f5 100644 --- a/org.sonatype.tycho.m2e.tests/src/org/sonatype/tycho/m2e/internal/TychoLifecycleMappingTest.java +++ b/org.sonatype.tycho.m2e.tests/src/org/sonatype/tycho/m2e/internal/TychoLifecycleMappingTest.java @@ -12,7 +12,9 @@ import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; +import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.project.IMavenProjectFacade; import org.eclipse.m2e.core.project.configurator.ILifecycleMapping; import org.eclipse.m2e.tests.common.AbstractLifecycleMappingTest; @@ -113,4 +115,35 @@ public void testTychoLifecycleMapping_EclipseUpdateSite() IProject project = facade.getProject(); assertTrue( project.hasNature( PDE.SITE_NATURE ) ); } + + + public void testUpdateWhenJarInClasspath_EclipsePlugin() + throws Exception + { + IMavenProjectFacade facade = + importProjectAndAssertLifecycleMappingType( "projects/local-jar-classpath", "pom.xml" ); + + IProject project = facade.getProject(); + assertTrue( project.hasNature( PDE.PLUGIN_NATURE ) ); + assertTrue( project.hasNature( JavaCore.NATURE_ID ) ); + IPluginModelBase model = PluginRegistry.findModel( project ); + assertNotNull( model ); + + IJavaProject jproject = JavaCore.create(project); + assertNotNull(jproject); + IClasspathEntry[] classpathEntries = jproject.getRawClasspath(); + assertEquals( 4, classpathEntries.length ); + MavenPlugin.getProjectConfigurationManager().updateProjectConfiguration(project, monitor); + jproject = null; + waitForJobsToComplete(); + + jproject = JavaCore.create(project); + classpathEntries = jproject.getRawClasspath(); + assertEquals( 4, classpathEntries.length ); + assertClasspathContains( classpathEntries, "org.eclipse.jdt.launching.JRE_CONTAINER" ); + assertClasspathContains( classpathEntries, "org.eclipse.pde.core.requiredPlugins" ); + assertClasspathContains( classpathEntries, "/local-jar-classpath/src/main/java/" ); + assertClasspathContains( classpathEntries, "/local-jar-classpath/lib/local-jar-classpath.jar" ); + + } } diff --git a/org.sonatype.tycho.m2e/src/org/sonatype/tycho/m2e/internal/PDEProjectHelper.java b/org.sonatype.tycho.m2e/src/org/sonatype/tycho/m2e/internal/PDEProjectHelper.java index 49d6fc8..fac2cd7 100644 --- a/org.sonatype.tycho.m2e/src/org/sonatype/tycho/m2e/internal/PDEProjectHelper.java +++ b/org.sonatype.tycho.m2e/src/org/sonatype/tycho/m2e/internal/PDEProjectHelper.java @@ -131,7 +131,6 @@ public void configurePDEBundleProject( IProject project, MavenProject mavenProje // PDE can't handle default JDT classpath IJavaProject javaProject = JavaCore.create( project ); - javaProject.setRawClasspath( new IClasspathEntry[0], true, monitor ); javaProject.setOutputLocation( getOutputLocation( project, mavenProject, monitor ), monitor ); // see org.eclipse.pde.internal.ui.wizards.tools.UpdateClasspathJob @@ -236,10 +235,10 @@ public static IFile getBundleManifest( IProject project ) private static void setClasspath( IProject project, IPluginModelBase model, IProgressMonitor monitor ) throws CoreException { - ClasspathComputer.setClasspath( project, model ); - + IClasspathEntry[] entries = ClasspathComputer.getClasspath(project, model, null, true /*clear existing entries*/, true); + JavaCore.create(project).setRawClasspath(entries, null); // workaround PDE sloppy model management during the first multimodule project import in eclipse session - // 1. m2e creates all modules as simple workspace projects without JDT or PDE nattues + // 1. m2e creates all modules as simple workspace projects without JDT or PDE natures // 2. first call to org.eclipse.pde.internal.core.PluginModelManager.initializeTable() reads all workspace // projects regardless of their natures (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=319268) // 3. going through all projects one by one @@ -248,7 +247,7 @@ private static void setClasspath( IProject project, IPluginModelBase model, IPro // that do not have JAVA nature. at this point PDE classpath is missing some/all workspace dependencies. // 4. PDE does not re-resolve classpath when dependencies get JAVA nature enabled - // as a workaround, touch project bundle manifests to force PDE re-read the model, reresolve dependencies + // as a workaround, touch project bundle manifests to force PDE re-read the model, re-resolve dependencies // and recalculate PDE classpath IFile manifest = PDEProjectHelper.getBundleManifest( project );