[255243] JARs in Library Directory should be included in the module's Classpath
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/AllTests.java
index 7aa2541..466f32b 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/AllTests.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/AllTests.java
@@ -28,6 +28,7 @@
 //        suite.addTest(ProjectWebLibRefactoringTests.suite());
         suite.addTest(ProjectClasspathRefactoringTests.suite());
         suite.addTest(ProjectServerRefactoringTests.suite());
+        suite.addTest(EarLibDirContainerTests.suite());
         
         return suite;
     }
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/EarLibDirContainerTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/EarLibDirContainerTests.java
new file mode 100644
index 0000000..82b3eae
--- /dev/null
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/EarLibDirContainerTests.java
@@ -0,0 +1,113 @@
+package org.eclipse.jst.j2ee.dependency.tests;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.j2ee.dependency.tests.util.DependencyCreationUtil;
+import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater;
+
+public class EarLibDirContainerTests extends AbstractTests {
+	
+	private static final String EAR_PROJECT_NAME = "TestEAR";
+	private static final String LIB_PROJECT_NAME = "TestLib";
+	private static final String UTIL_PROJECT_NAME = "TestUtil";
+	
+	public EarLibDirContainerTests(String name) {
+		super(name);
+	}
+	
+	public static Test suite() {
+		final TestSuite suite = new TestSuite();
+        suite.setName("EAR Container Library Directory Tests");
+        suite.addTest(new EarLibDirContainerTests("testEarLibDirDependency"));
+        return suite;
+	}
+	
+	public void testEarLibDirDependency() throws Exception {
+		ResourcesPlugin.getWorkspace().getRoot().getProjects();
+		IProject earProject = ProjectUtil.createEARProject(EAR_PROJECT_NAME, J2EEVersionConstants.JEE_5_0_ID, false);
+		IProject utilProject = ProjectUtil.createUtilityProject(UTIL_PROJECT_NAME, EAR_PROJECT_NAME);
+		IProject libProject = ProjectUtil.createUtilityProject(LIB_PROJECT_NAME, null);
+		DependencyCreationUtil.createEARDependency(earProject, libProject, true);
+		updateEARLibrariesContainer(utilProject);
+        waitForCondition(cpContains(utilProject, new Path(IPath.SEPARATOR + LIB_PROJECT_NAME)));
+	}
+	
+	private static void updateEARLibrariesContainer(IProject project) {
+		ArrayList projectList = new ArrayList();
+		projectList.add(project);
+		J2EEComponentClasspathUpdater.getInstance().forceUpdate(projectList);
+	}
+	
+	private static ICondition cpContains(final IProject project, final IPath entry) {
+		return new ClasspathContainsCondition( project, entry );
+	}
+    
+    private static void waitForCondition( final ICondition condition ) throws Exception {
+        waitForCondition( condition, 10 );
+    }
+    
+    private static void waitForCondition( final ICondition condition, final int seconds ) throws Exception {
+        for( int i = 0; i < seconds && ! condition.check(); i++ ) {
+            try {
+                Thread.sleep( 1000 );
+            }
+            catch( InterruptedException e ) {}
+        }
+        
+        assertCondition( condition );
+    }
+    
+    private static void assertCondition( final ICondition condition ) throws Exception {
+        assertTrue( condition.check() );
+    }
+    
+    private static interface ICondition {
+        boolean check() throws Exception;
+    }
+    
+    private static abstract class AbstractClasspathCondition implements ICondition {
+        private final IProject project;
+        private final IPath entry;
+        
+        public AbstractClasspathCondition( final IProject project, final IPath entry ) {
+            this.project = project;
+            this.entry = entry;
+        }
+        
+        protected boolean internalCheck() throws Exception {
+            final IJavaProject jproj = JavaCore.create( this.project );
+            final IClasspathEntry[] cp = jproj.getResolvedClasspath( true );
+            
+            for( int i = 0; i < cp.length; i++ ) {
+                if( cp[ i ].getPath().equals( this.entry ) ) {
+                    return true;
+                }
+            }
+            
+            return false;
+        }
+    }
+    
+    private static final class ClasspathContainsCondition extends AbstractClasspathCondition {
+	    public ClasspathContainsCondition( final IProject project, final IPath entry ) {
+	        super( project, entry );
+	    }
+	    
+	    public boolean check() throws Exception {
+	        return internalCheck();
+	    }
+	}
+
+}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/util/DependencyCreationUtil.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/util/DependencyCreationUtil.java
index 67ce2bb..e9a66d5 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/util/DependencyCreationUtil.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/dependency/tests/util/DependencyCreationUtil.java
@@ -44,6 +44,10 @@
 public class DependencyCreationUtil {
 	
 	public static void createEARDependency(final IProject earProject, final IProject childProject) throws ExecutionException {
+		createEARDependency(earProject, childProject, false);
+	}
+	
+	public static void createEARDependency(final IProject earProject, final IProject childProject, final boolean inLibDir) throws ExecutionException {
 		final IDataModel dm = DataModelFactory.createDataModel(new AddComponentToEnterpriseApplicationDataModelProvider());
 		IVirtualComponent earComp = ComponentCore.createComponent(earProject);
 		IVirtualComponent childComp = ComponentCore.createComponent(childProject);
@@ -51,6 +55,9 @@
 		final List depList = new ArrayList();
 		depList.add(childComp);
 		dm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, depList);
+		if (inLibDir) {
+			dm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH, J2EEConstants.EAR_DEFAULT_LIB_DIR); //$NON-NLS-1$
+		}
 		dm.getDefaultOperation().execute(null, null);
         ProjectUtil.waitForClasspathUpdate();
 	}