diff --git a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineSupportProvider.java b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineSupportProvider.java index 39d2f248d9d9..31f913c4cef1 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineSupportProvider.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineSupportProvider.java @@ -37,6 +37,7 @@ import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; @@ -56,6 +57,8 @@ import javax.swing.text.JTextComponent; import java.awt.*; import java.io.IOException; import java.util.Collection; +import java.util.Collections; +import java.util.List; /** * @author nik @@ -120,7 +123,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider webIntegration.setupRunConfiguration(sdk, artifact, project); webIntegration.addDevServerToModuleDependencies(rootModel, sdk); - final Library apiJar = addProjectLibrary(module, "AppEngine API", sdk.getLibUserDirectoryPath(), VirtualFile.EMPTY_ARRAY); + final Library apiJar = addProjectLibrary(module, "AppEngine API", sdk.getUserLibraryPaths(), VirtualFile.EMPTY_ARRAY); rootModel.addLibraryEntry(apiJar); webIntegration.addLibraryToArtifact(apiJar, artifact, project); @@ -151,7 +154,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider catch (IOException e) { LOG.error(e); } - final Library library = addProjectLibrary(module, "AppEngine ORM", sdk.getOrmLibDirectoryPath(), sdk.getOrmLibSources()); + final Library library = addProjectLibrary(module, "AppEngine ORM", Collections.singletonList(sdk.getOrmLibDirectoryPath()), sdk.getOrmLibSources()); rootModel.addLibraryEntry(library); webIntegration.addLibraryToArtifact(library, artifact, project); } @@ -174,7 +177,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider return artifactManager.addArtifact(module.getName(), artifactType, root); } - private static Library addProjectLibrary(final Module module, final String name, final String path, final VirtualFile[] sources) { + private static Library addProjectLibrary(final Module module, final String name, final List jarDirectories, final VirtualFile[] sources) { return new WriteAction() { protected void run(final Result result) { final LibraryTable libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTable(module.getProject()); @@ -182,7 +185,9 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider if (library == null) { library = libraryTable.createLibrary(name); final Library.ModifiableModel model = library.getModifiableModel(); - model.addJarDirectory(VfsUtil.pathToUrl(path), false); + for (String path : jarDirectories) { + model.addJarDirectory(VfsUtilCore.pathToUrl(path), false); + } for (VirtualFile sourceRoot : sources) { model.addRoot(sourceRoot, OrderRootType.SOURCES); } diff --git a/plugins/google-app-engine/source/com/intellij/appengine/sdk/AppEngineSdk.java b/plugins/google-app-engine/source/com/intellij/appengine/sdk/AppEngineSdk.java index 1da2cfffd033..318c9502bc1c 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/sdk/AppEngineSdk.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/sdk/AppEngineSdk.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; +import java.util.List; /** * @author nik @@ -47,7 +48,7 @@ public interface AppEngineSdk { String getOrmLibDirectoryPath(); - String getLibUserDirectoryPath(); + List getUserLibraryPaths(); VirtualFile[] getOrmLibSources(); diff --git a/plugins/google-app-engine/source/com/intellij/appengine/sdk/impl/AppEngineSdkImpl.java b/plugins/google-app-engine/source/com/intellij/appengine/sdk/impl/AppEngineSdkImpl.java index 5c60ab0a6118..7c7a59b5ccd3 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/sdk/impl/AppEngineSdkImpl.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/sdk/impl/AppEngineSdkImpl.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; @@ -167,6 +168,25 @@ public class AppEngineSdkImpl implements AppEngineSdk { return getLibUserDirectoryPath() + "/orm"; } + @Override + public List getUserLibraryPaths() { + List result = new ArrayList(); + result.add(getLibUserDirectoryPath()); + File opt = new File(myHomePath, "lib/opt/user"); + ContainerUtil.addIfNotNull(result, findLatestVersion(new File(opt, "appengine-endpoints"))); + ContainerUtil.addIfNotNull(result, findLatestVersion(new File(opt, "jsr107"))); + return result; + } + + private static String findLatestVersion(File dir) { + String[] names = dir.list(); + if (names != null && names.length > 0) { + String max = Collections.max(Arrays.asList(names)); + return FileUtil.toSystemIndependentName(new File(dir, max).getAbsolutePath()); + } + return null; + } + public VirtualFile[] getOrmLibSources() { final File libsDir = new File(FileUtil.toSystemDependentName(myHomePath + "/src/orm")); final File[] files = libsDir.listFiles();