[314575] Add manifest entry page of module project should not list files in lib dir of its EAR
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/modulecore/util/JEEManifestDiscerner.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/modulecore/util/JEEManifestDiscerner.java
index e506def..652b99f 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/modulecore/util/JEEManifestDiscerner.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/modulecore/util/JEEManifestDiscerner.java
@@ -21,7 +21,12 @@
import org.eclipse.jst.common.internal.modulecore.util.ArchiveManifest;
import org.eclipse.jst.common.internal.modulecore.util.IJavaComponentDiscerner;
import org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities;
+import org.eclipse.jst.j2ee.internal.J2EEConstants;
+import org.eclipse.jst.j2ee.model.IEARModelProvider;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.j2ee.project.EarUtilities;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.javaee.application.Application;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
@@ -64,7 +69,7 @@
protected ArrayList<IVirtualReference> findAllPossibleEntries(IProject parentProject, IProject childProject) {
IVirtualComponent ear = ComponentCore.createComponent(parentProject);
IVirtualReference[] hardRefs = ear.getReferences();
- IVirtualReference[] actual_tmp = trimEarHardRefs(childProject, hardRefs);
+ IVirtualReference[] actual_tmp = trimEarHardRefs(ear, childProject, hardRefs);
IVirtualReference[] actual_clean = cleanHardRefs(actual_tmp);
ArrayList<IVirtualReference> refs = new ArrayList<IVirtualReference>();
refs.addAll(Arrays.asList(actual_clean));
@@ -77,7 +82,16 @@
* @param hardRefs
* @return
*/
- private IVirtualReference[] trimEarHardRefs(IProject childProject, IVirtualReference[] hardRefs) {
+ private IVirtualReference[] trimEarHardRefs(IVirtualComponent ear, IProject childProject, IVirtualReference[] hardRefs) {
+ String earLibDir = null;
+ if(JavaEEProjectUtilities.isJEEComponent(ear)) {
+ final IEARModelProvider earModel = (IEARModelProvider)ModelProviderManager.getModelProvider(ear.getProject());
+ Application app = (Application)earModel.getModelObject();
+ earLibDir = app.getLibraryDirectory();
+ if(earLibDir == null) {
+ earLibDir = J2EEConstants.EAR_DEFAULT_LIB_DIR;
+ }
+ }
ArrayList<IVirtualReference> refs = new ArrayList<IVirtualReference>();
// We have to prune out self-references
for( int i = 0; i < hardRefs.length; i++ ) {
@@ -86,7 +100,9 @@
|| hardRefs[i].getDependencyType() == IVirtualReference.DEPENDENCY_TYPE_CONSUMES
|| !hardRefs[i].getReferencedComponent().getProject().equals(childProject))
&& hardRefs[i].getArchiveName().endsWith("jar")) { //$NON-NLS-1$ // Only jar's are legal in MANIFEST
- refs.add(hardRefs[i]);
+ if(earLibDir == null || !hardRefs[i].getRuntimePath().equals(new Path(earLibDir))) {// Jars in the EAR's library directory should not be added to the MANIFEST for EE5/EE6
+ refs.add(hardRefs[i]);
+ }
}
}
return refs.toArray(new IVirtualReference[refs.size()]);