Issue Details (XML | Word | Printable)

Key: MECLIPSE-459
Type: Bug Bug
Status: Open Open
Priority: Critical Critical
Assignee: Unassigned
Reporter: Benjamin Voigt
Votes: 12
Watchers: 11
Operations

If you were logged in you would be able to see more operations.
Maven 2.x Eclipse Plugin

missing artifact references with pde mode enabled

Created: 09/Jun/08 07:24 AM   Updated: 02/Sep/09 10:43 AM
Component/s: Core : Dependencies resolution and build path (.classpath), PDE support
Affects Version/s: 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.5.1
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments: 1. Zip Archive pde_dep_missing.zip (4 kB)

Environment:
Maven version: 2.0.9
Java version: 1.5.0_11
OS name: "linux" version: "2.6.15-51-686" arch: "i386" Family: "unix"


 Description  « Hide

Some artifacts are not referenced after executing mvn eclipse:eclipse and having pde mode enabled. The strange thing is, that this does only happen for particluar versions of an artifact.
Two artifacts that I found with this problem are jetty (org.mortbay.jetty) and slf4j-log4j12 (org.slf4j-log4j12). Jetty versions beyond 6.1.5 work with pde enabled, higher versions do not. Same for slf4j-log4j12 versions =< 1.1.0.

Attached is an example project demonstrating the problem. Turn pde mode on/off in the pom and execute mvn eclipse:eclipse.



Benjamin Voigt added a comment - 10/Jun/08 01:20 AM

Mistake: I meant to say [...] jetty versions below 6.1.5 [...].


Benjamin Voigt added a comment - 03/Jul/08 09:10 AM

No solution or even similar issues for somebody ?
Meanwhile, the issue extends to the wicket library (org.apache.wicket:wicket) which, in version 1.3.x is included in the eclipse classpath while version 1.4-m2 is not.


Benjamin Voigt added a comment - 07/Jul/08 05:18 AM

Ok, after some investigation I found that this problem seems to be caused by two factors:
1. my project has pde enabled
2. the specific dependencies not working are osgi bundles.
This seems to be a bad combination as we have the following in the EclipseClasspathWriter Class:
...
if ( config.isPde() && ( dep.isProvided() || dep.isOsgiBundle() ) )
{
return;
...(line 415)
Thus, not adding for example, jetty 6.1.10 (or any of the above mentioned dependencies) to the classpath file.
Now my problem is that I neither understand why this is nor what I can do to add these dependencies to my project.

I am thankful for any suggestions


Gopalakrishnan U added a comment - 08/Jul/08 02:43 AM

I am also hit by this problem. As Benjamin pointed out I also think the problem is on line 415. It should have been

if ( config.isPde() && dep.isProvided() && dep.isOsgiBundle() )

i.e, don't add the dependency to the classpath if the dependency is provided AND it is a bundle AND the project is a PDE project.
It needs to be added to the class path if the dependency was not provided or it is not a OSGi bundle. Here is the patch

Index: src/main/java/org/apache/maven/plugin/eclipse/writers/EclipseClasspathWriter.java
===================================================================
— src/main/java/org/apache/maven/plugin/eclipse/writers/EclipseClasspathWriter.java (revision 674713)
+++ src/main/java/org/apache/maven/plugin/eclipse/writers/EclipseClasspathWriter.java (working copy)
@@ -412,7 +412,7 @@

// if the dependency is not provided and the plugin runs in "pde mode", the dependency is
// added to the Bundle-Classpath:

  • if ( config.isPde() && ( dep.isProvided() || dep.isOsgiBundle() ) )
    + if ( config.isPde() && dep.isProvided() && dep.isOsgiBundle() ) { return; }

Gopal


Gopalakrishnan U added a comment - 08/Jul/08 06:48 AM

Oops! Just figured out that the patch doesn't work. needs more work.


Benjamin Voigt added a comment - 21/Jul/08 04:50 AM - edited

Any progress on this ? I would try to solve this myself but a "mvn install" on the maven-eclipse-plugin sources keeps stuck at the unit/integration tests with nearly 100 % cpu being used.


Arnaud Heritier added a comment - 21/Jul/08 05:35 AM

The build can take 10 minutes or minutes depending of the hardware.
You can try to patch the code and launch the build bypassing tests to quickly the result on a project.


Benjamin Voigt added a comment - 21/Jul/08 08:02 AM

If it only were 10 minutes. After 40 minutes I killed the process because my system became totally unresponsive. Seems that the temporary files cause the trouble. Maybe it's an os specific problem, I'll look for that.


Arnaud Heritier added a comment - 21/Jul/08 12:06 PM

yes, 40 minutes is too long. You can have a look at surefire reports which store integration tests results to see if something is wrong with your plateform.


Jacob Northey added a comment - 20/Sep/08 09:19 PM

Is there a resolution for this? It would be nice to not have to download the source and maintain it internally.

Does anybody require the current implementation? i.e. is anybody using OSGi bundle dependencies that aren't marked as provided? It seems like most people use provided scope.


Edd Steel added a comment - 16/Oct/08 05:47 AM

We are using commons-math as a compile scope dependency, which has been an OSGi bundle since 1.2 (https://issues.apache.org/jira/browse/MATH-180).


Benjamin Voigt added a comment - 21/Oct/08 06:39 AM

@Edd Steel: Do you have pde mode enabled in the project where you use the commons-math bundle ?


Simon Nickerson added a comment - 12/Dec/08 04:46 AM

I am working on the same project as Edd Steel (above) - we have pde mode enabled in the project which depends on commons-math. We have got round it by downgrading to 1.1. There appears to be a similar issue with commons-io.


luke w patterson added a comment - 01/Mar/09 03:33 PM

I see the same problem. When <pde> is enabled, some bundle dependencies are missing.


Eugene Voytitsky added a comment - 02/Sep/09 10:43 AM

Maybe plugin's author had reasons for implementing such a skipping
but nowadays the more and more maven artifacts became osgi-fied,
so skipping osgi-bundled artifact from being included in MANIFEST classpath (and skipping it beign linked to project as linkedResource)
looks as unpractical.

Currently there are at least 2 places in src where fixes should be applied:
already mentioned EclipseClasspathWriter.java and also EclipseProjectWriter.java around the code:
if ( dep.isAddedToClasspath() && !dep.isProvided() && !dep.isReferencedProject()
&& !dep.isTestDependency() && !dep.isOsgiBundle() )
{

Actually it would be great to have ability to specify whether include osgi bundles or not in plugin configuration options.
Thanks.