Search in sources :

Example 6 with MavenArtifact

use of org.jetbrains.idea.maven.model.MavenArtifact in project intellij-plugins by JetBrains.

the class Flexmojos3Configurator method getFlexCompilerMavenId.

private MavenId getFlexCompilerMavenId() {
    for (final MavenId mavenId : myFlexmojosPlugin.getDependencies()) {
        if (FLEX_COMPILER_ARTIFACT_ID.equals(mavenId.getArtifactId()) && (FLEX_COMPILER_ADOBE_GROUP_ID.equals(mavenId.getGroupId()) || FLEX_COMPILER_APACHE_GROUP_ID.equals(mavenId.getGroupId()))) {
            return mavenId;
        }
    }
    for (final MavenArtifact mavenArtifact : myMavenProject.getDependencies()) {
        if ("com.adobe.flex".equals(mavenArtifact.getGroupId()) && "framework".equals(mavenArtifact.getArtifactId()) || "com.adobe.flex.framework".equals(mavenArtifact.getGroupId()) && ("flex-framework".equals(mavenArtifact.getArtifactId()) || "air-framework".equals(mavenArtifact.getArtifactId()))) {
            return new MavenId(FLEX_COMPILER_ADOBE_GROUP_ID, FLEX_COMPILER_ARTIFACT_ID, mavenArtifact.getVersion());
        }
        if ("org.apache.flex".equals(mavenArtifact.getGroupId()) && "framework".equals(mavenArtifact.getArtifactId()) || "org.apache.flex.framework".equals(mavenArtifact.getGroupId()) && ("flex-framework".equals(mavenArtifact.getArtifactId()) || "common-framework".equals(mavenArtifact.getArtifactId()))) {
            return new MavenId(FLEX_COMPILER_APACHE_GROUP_ID, FLEX_COMPILER_ARTIFACT_ID, mavenArtifact.getVersion());
        }
    }
    // correct flexmojos-maven-plugin resolving and taking version from 'flex.sdk.version' property value is rather expensive, so version is hardcoded
    final String version;
    final String pluginVersion = myFlexmojosPlugin.getVersion();
    if (StringUtil.compareVersionNumbers(pluginVersion, "5") >= 0) {
        version = "4.6.0.23201";
    } else if (StringUtil.compareVersionNumbers(pluginVersion, "4.1") >= 0 || pluginVersion != null && pluginVersion.startsWith("4.0-RC")) {
        version = "4.5.1.21328";
    } else if (StringUtil.compareVersionNumbers(pluginVersion, "4") >= 0) {
        version = "4.5.0.18623";
    } else {
        version = "3.2.0.3958";
    }
    return new MavenId(FLEX_COMPILER_ADOBE_GROUP_ID, FLEX_COMPILER_ARTIFACT_ID, version);
}
Also used : MavenId(org.jetbrains.idea.maven.model.MavenId) MavenArtifact(org.jetbrains.idea.maven.model.MavenArtifact)

Example 7 with MavenArtifact

use of org.jetbrains.idea.maven.model.MavenArtifact in project android by JetBrains.

the class AndroidFacetImporterBase method doResolveApklibArtifact.

private void doResolveApklibArtifact(Project project, MavenArtifact artifact, MavenEmbedderWrapper embedder, MavenProjectsManager mavenProjectsManager, String moduleName, AndroidExternalApklibDependenciesManager adm, ResolveContext context) throws MavenProcessCanceledException {
    final File depArtifacetFile = new File(FileUtil.getNameWithoutExtension(artifact.getPath()) + ".pom");
    if (!depArtifacetFile.exists()) {
        AndroidUtils.reportImportErrorToEventLog("Cannot find file " + depArtifacetFile.getPath(), moduleName, project);
        return;
    }
    final VirtualFile vDepArtifactFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(depArtifacetFile);
    if (vDepArtifactFile == null) {
        AndroidUtils.reportImportErrorToEventLog("Cannot find file " + depArtifacetFile.getPath() + " in VFS", moduleName, project);
        return;
    }
    final MavenProject projectForExternalApklib = new MavenProject(vDepArtifactFile);
    final MavenGeneralSettings generalSettings = mavenProjectsManager.getGeneralSettings();
    final MavenProjectReader mavenProjectReader = new MavenProjectReader(project);
    final MavenProjectReaderProjectLocator locator = new MavenProjectReaderProjectLocator() {

        @Nullable
        @Override
        public VirtualFile findProjectFile(MavenId coordinates) {
            return null;
        }
    };
    final MavenArtifactResolvedInfo info = new MavenArtifactResolvedInfo();
    final MavenId mavenId = artifact.getMavenId();
    adm.setResolvedInfoForArtifact(mavenId, info);
    projectForExternalApklib.read(generalSettings, mavenProjectsManager.getExplicitProfiles(), mavenProjectReader, locator);
    projectForExternalApklib.resolve(project, generalSettings, embedder, mavenProjectReader, locator, context);
    final String apiLevel = getPlatformFromConfig(projectForExternalApklib);
    final List<AndroidExternalApklibDependenciesManager.MavenDependencyInfo> dependencies = new ArrayList<AndroidExternalApklibDependenciesManager.MavenDependencyInfo>();
    List<MavenArtifact> deps = projectForExternalApklib.getDependencies();
    if (deps.isEmpty()) {
        // Hack for solving IDEA-119450. Maven reports "unknown packaging 'apklib'" when resolving if android plugin is not specified
        // in the "build" section of the pom, so we create fake jar artifact dependent on the apklib artifact and resolve it
        final File fakePomFile = buildFakeArtifactPomFile(artifact, moduleName, project);
        if (fakePomFile != null) {
            try {
                final VirtualFile vFakePomFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(fakePomFile);
                if (vFakePomFile != null) {
                    final MavenProject fakeProject = new MavenProject(vFakePomFile);
                    fakeProject.read(generalSettings, mavenProjectsManager.getExplicitProfiles(), mavenProjectReader, locator);
                    fakeProject.resolve(project, generalSettings, embedder, mavenProjectReader, locator, context);
                    deps = fakeProject.getDependencies();
                    for (Iterator<MavenArtifact> it = deps.iterator(); it.hasNext(); ) {
                        final MavenArtifact dep = it.next();
                        if (dep.getMavenId().equals(mavenId)) {
                            it.remove();
                        }
                    }
                } else {
                    LOG.error("Cannot find file " + fakePomFile.getPath() + " in the VFS");
                }
            } finally {
                FileUtil.delete(fakePomFile);
            }
        }
    }
    for (MavenArtifact depArtifact : deps) {
        dependencies.add(AndroidExternalApklibDependenciesManager.MavenDependencyInfo.create(depArtifact));
    }
    info.setApiLevel(apiLevel != null ? apiLevel : "");
    info.setDependencies(dependencies);
}
Also used : MavenId(org.jetbrains.idea.maven.model.MavenId) File(java.io.File) MavenArtifact(org.jetbrains.idea.maven.model.MavenArtifact)

Example 8 with MavenArtifact

use of org.jetbrains.idea.maven.model.MavenArtifact in project android by JetBrains.

the class AndroidFacetImporterBase method importExternalAndroidLibDependencies.

private static void importExternalAndroidLibDependencies(Project project, MavenRootModelAdapter rootModelAdapter, IdeModifiableModelsProvider modelsProvider, MavenProjectsTree mavenTree, MavenProject mavenProject, Map<MavenProject, String> mavenProject2ModuleName, List<MavenProjectsProcessorTask> tasks) {
    final ModifiableRootModel rootModel = rootModelAdapter.getRootModel();
    removeUselessDependencies(rootModel, modelsProvider, mavenProject);
    for (MavenArtifact depArtifact : mavenProject.getDependencies()) {
        if (mavenTree.findProject(depArtifact) != null) {
            continue;
        }
        final String type = depArtifact.getType();
        if (AndroidMavenUtil.APKLIB_DEPENDENCY_AND_PACKAGING_TYPE.equals(type)) {
            final AndroidExternalApklibDependenciesManager.MavenDependencyInfo depInfo = AndroidExternalApklibDependenciesManager.MavenDependencyInfo.create(depArtifact);
            final String apklibModuleName = doImportExternalApklibDependency(project, modelsProvider, mavenTree, mavenProject, mavenProject2ModuleName, tasks, depInfo);
            if (ArrayUtil.find(rootModel.getDependencyModuleNames(), apklibModuleName) < 0) {
                final DependencyScope scope = getApklibModuleDependencyScope(depArtifact);
                if (scope != null) {
                    addModuleDependency(modelsProvider, rootModel, apklibModuleName, scope);
                }
            }
        } else if (AndroidMavenUtil.AAR_DEPENDENCY_AND_PACKAGING_TYPE.equals(type) && MavenConstants.SCOPE_COMPILE.equals(depArtifact.getScope())) {
            importExternalAarDependency(depArtifact, mavenProject, mavenTree, rootModelAdapter, modelsProvider, project, tasks);
        }
    }
}
Also used : MavenArtifact(org.jetbrains.idea.maven.model.MavenArtifact)

Example 9 with MavenArtifact

use of org.jetbrains.idea.maven.model.MavenArtifact in project android by JetBrains.

the class AndroidFacetImporterBase method importNativeDependencies.

private void importNativeDependencies(@NotNull AndroidFacet facet, @NotNull MavenProject mavenProject, @NotNull String moduleDirPath) {
    final List<AndroidNativeLibData> additionalNativeLibs = new ArrayList<AndroidNativeLibData>();
    final String localRepository = MavenProjectsManager.getInstance(facet.getModule().getProject()).getLocalRepository().getPath();
    String defaultArchitecture = getPathFromConfig(facet.getModule(), mavenProject, moduleDirPath, "nativeLibrariesDependenciesHardwareArchitectureDefault", false, true);
    if (defaultArchitecture == null) {
        defaultArchitecture = DEFAULT_NATIVE_ARCHITECTURE;
    }
    final String forcedArchitecture = getPathFromConfig(facet.getModule(), mavenProject, moduleDirPath, "nativeLibrariesDependenciesHardwareArchitectureOverride", false, true);
    for (MavenArtifact depArtifact : mavenProject.getDependencies()) {
        if (AndroidMavenUtil.SO_PACKAGING_AND_DEPENDENCY_TYPE.equals(depArtifact.getType())) {
            final String architecture;
            if (forcedArchitecture != null) {
                architecture = forcedArchitecture;
            } else {
                final String classifier = depArtifact.getClassifier();
                architecture = classifier != null ? classifier : defaultArchitecture;
            }
            final String path = FileUtil.toSystemIndependentName(localRepository + '/' + depArtifact.getRelativePath());
            final String artifactId = depArtifact.getArtifactId();
            final String targetFileName = artifactId.startsWith("lib") ? artifactId + ".so" : "lib" + artifactId + ".so";
            additionalNativeLibs.add(new AndroidNativeLibData(architecture, path, targetFileName));
        }
    }
    facet.getConfiguration().setAdditionalNativeLibraries(additionalNativeLibs);
}
Also used : AndroidNativeLibData(org.jetbrains.android.util.AndroidNativeLibData) MavenArtifact(org.jetbrains.idea.maven.model.MavenArtifact)

Example 10 with MavenArtifact

use of org.jetbrains.idea.maven.model.MavenArtifact in project android by JetBrains.

the class AndroidFacetImporterBase method removeAttachedJarDependency.

private static void removeAttachedJarDependency(IdeModifiableModelsProvider modelsProvider, MavenProjectsTree mavenTree, MavenProject mavenProject) {
    for (MavenArtifact depArtifact : mavenProject.getDependencies()) {
        final MavenProject depProject = mavenTree.findProject(depArtifact);
        if (depProject == null) {
            continue;
        }
        final String attachedJarsLibName = MavenModuleImporter.getAttachedJarsLibName(depArtifact);
        final Library attachedJarsLib = modelsProvider.getLibraryByName(attachedJarsLibName);
        if (attachedJarsLib != null) {
            final Library.ModifiableModel attachedJarsLibModel = modelsProvider.getModifiableLibraryModel(attachedJarsLib);
            if (attachedJarsLibModel != null) {
                final String targetJarPath = depProject.getBuildDirectory() + "/" + depProject.getFinalName() + ".jar";
                for (String url : attachedJarsLibModel.getUrls(OrderRootType.CLASSES)) {
                    if (FileUtil.pathsEqual(targetJarPath, JpsPathUtil.urlToPath(url))) {
                        attachedJarsLibModel.removeRoot(url, OrderRootType.CLASSES);
                    }
                }
            }
        }
    }
}
Also used : Library(com.intellij.openapi.roots.libraries.Library) MavenArtifact(org.jetbrains.idea.maven.model.MavenArtifact)

Aggregations

MavenArtifact (org.jetbrains.idea.maven.model.MavenArtifact)21 File (java.io.File)5 NotNull (org.jetbrains.annotations.NotNull)4 MavenId (org.jetbrains.idea.maven.model.MavenId)4 MavenProject (org.jetbrains.idea.maven.project.MavenProject)4 VirtualFile (com.intellij.openapi.vfs.VirtualFile)3 Library (com.intellij.openapi.roots.libraries.Library)2 SmartList (com.intellij.util.SmartList)2 THashSet (gnu.trove.THashSet)2 List (java.util.List)2 Map (java.util.Map)2 Attrs (aQute.bnd.header.Attrs)1 Parameters (aQute.bnd.header.Parameters)1 Analyzer (aQute.bnd.osgi.Analyzer)1 AccessToken (com.intellij.openapi.application.AccessToken)1 Module (com.intellij.openapi.module.Module)1 DumbProgressIndicator (com.intellij.openapi.progress.DumbProgressIndicator)1 Project (com.intellij.openapi.project.Project)1 CompilerModuleExtension (com.intellij.openapi.roots.CompilerModuleExtension)1 ContentEntry (com.intellij.openapi.roots.ContentEntry)1