public void addLibraryDependency( MavenArtifact artifact, DependencyScope scope, MavenModifiableModelsProvider provider, MavenProject project) { String libraryName = artifact.getLibraryName(); Library library = provider.getLibraryByName(libraryName); if (library == null) { library = provider.createLibrary(libraryName); } Library.ModifiableModel libraryModel = provider.getLibraryModel(library); updateUrl(libraryModel, OrderRootType.CLASSES, artifact, null, null, true); if (!MavenConstants.SCOPE_SYSTEM.equals(artifact.getScope())) { updateUrl( libraryModel, OrderRootType.SOURCES, artifact, MavenExtraArtifactType.SOURCES, project, false); updateUrl( libraryModel, JavadocOrderRootType.getInstance(), artifact, MavenExtraArtifactType.DOCS, project, false); } LibraryOrderEntry e = myRootModel.addLibraryEntry(library); e.setScope(scope); }
@Override @Nullable protected ClasspathTableItem<?> createTableItem(final Library item) { // clear invalid order entry corresponding to added library if any final ModifiableRootModel rootModel = myClasspathPanel.getRootModel(); final OrderEntry[] orderEntries = rootModel.getOrderEntries(); for (OrderEntry orderEntry : orderEntries) { if (orderEntry instanceof LibraryOrderEntry) { final LibraryOrderEntry libraryOrderEntry = (LibraryOrderEntry) orderEntry; if (item.equals(libraryOrderEntry.getLibrary())) { return ClasspathTableItem.createItem(libraryOrderEntry, myContext); } String name = item.getName(); if (name != null && name.equals(libraryOrderEntry.getLibraryName())) { if (orderEntry.isValid()) { Messages.showErrorDialog( ProjectBundle.message("classpath.message.library.already.added", item.getName()), ProjectBundle.message("classpath.title.adding.dependency")); return null; } else { rootModel.removeOrderEntry(orderEntry); } } } } final LibraryOrderEntry orderEntry = rootModel.addLibraryEntry(item); DependencyScope defaultScope = getDefaultScope(item); if (defaultScope != null) { orderEntry.setScope(defaultScope); } return ClasspathTableItem.createItem(orderEntry, myContext); }
private void addAttachArtifactDependency( @NotNull Element buildHelperCfg, @NotNull DependencyScope scope, @NotNull MavenProject mavenProject, @NotNull MavenArtifact artifact) { Library.ModifiableModel libraryModel = null; for (Element artifactsElement : (List<Element>) buildHelperCfg.getChildren("artifacts")) { for (Element artifactElement : (List<Element>) artifactsElement.getChildren("artifact")) { String typeString = artifactElement.getChildTextTrim("type"); if (typeString != null && !typeString.equals("jar")) continue; OrderRootType rootType = OrderRootType.CLASSES; String classifier = artifactElement.getChildTextTrim("classifier"); if ("sources".equals(classifier)) { rootType = OrderRootType.SOURCES; } else if ("javadoc".equals(classifier)) { rootType = JavadocOrderRootType.getInstance(); } String filePath = artifactElement.getChildTextTrim("file"); if (StringUtil.isEmpty(filePath)) continue; VirtualFile file = VfsUtil.findRelativeFile(filePath, mavenProject.getDirectoryFile()); if (file == null) continue; file = JarFileSystem.getInstance().getJarRootForLocalFile(file); if (file == null) continue; if (libraryModel == null) { String libraryName = artifact.getLibraryName(); assert libraryName.startsWith(MavenArtifact.MAVEN_LIB_PREFIX); libraryName = MavenArtifact.MAVEN_LIB_PREFIX + "ATTACHED-JAR: " + libraryName.substring(MavenArtifact.MAVEN_LIB_PREFIX.length()); Library library = myModifiableModelsProvider.getLibraryByName(libraryName); if (library == null) { library = myModifiableModelsProvider.createLibrary(libraryName); } libraryModel = myModifiableModelsProvider.getLibraryModel(library); LibraryOrderEntry entry = myRootModelAdapter.getRootModel().addLibraryEntry(library); entry.setScope(scope); } libraryModel.addRoot(file, rootType); } } }
private static void setLibraryScope( @NotNull LibraryOrderEntry orderEntry, @NotNull Library lib, @NotNull Module module, @NotNull LibraryDependencyData dependencyData) { orderEntry.setExported(dependencyData.isExported()); orderEntry.setScope(dependencyData.getScope()); LOG.debug( String.format( "Configuring library '%s' of module '%s' to be%s exported and have scope %s", lib, module.getName(), dependencyData.isExported() ? " not" : "", dependencyData.getScope())); }
private void importMissing( @NotNull Set<LibraryDependencyData> toImport, @NotNull ModifiableRootModel moduleRootModel, @NotNull LibraryTable moduleLibraryTable, @NotNull LibraryTable libraryTable, @NotNull Module module) { for (LibraryDependencyData dependencyData : toImport) { LibraryData libraryData = dependencyData.getTarget(); if (libraryData.isUnresolved()) { continue; } switch (dependencyData.getLevel()) { case MODULE: @SuppressWarnings("ConstantConditions") Library moduleLib = moduleLibraryTable.createLibrary(dependencyData.getName()); Library.ModifiableModel libModel = moduleLib.getModifiableModel(); try { Map<OrderRootType, Collection<File>> files = myLibraryManager.prepareLibraryFiles(libraryData); myLibraryManager.registerPaths(files, libModel, dependencyData.getName()); } finally { libModel.commit(); } break; case PROJECT: final Library projectLib = libraryTable.getLibraryByName(dependencyData.getName()); if (projectLib == null) { assert false; continue; } LibraryOrderEntry orderEntry = moduleRootModel.addLibraryEntry(projectLib); LOG.info( String.format( "Adding library dependency '%s' to module '%s'", projectLib.getName(), module.getName())); orderEntry.setExported(dependencyData.isExported()); orderEntry.setScope(dependencyData.getScope()); LOG.info( String.format( "Configuring library dependency '%s' of module '%s' to be%s exported and have scope %s", projectLib.getName(), module.getName(), dependencyData.isExported() ? " not" : "", dependencyData.getScope())); } } }
private void configSurefirePlugin() { List<String> urls = new ArrayList<String>(); AccessToken accessToken = ReadAction.start(); try { MavenDomProjectModel domModel = null; Element config = myMavenProject.getPluginConfiguration( "org.apache.maven.plugins", "maven-surefire-plugin"); for (String each : MavenJDOMUtil.findChildrenValuesByPath( config, "additionalClasspathElements", "additionalClasspathElement")) { String url = VfsUtil.pathToUrl(each); if (domModel == null) { domModel = MavenDomUtil.getMavenDomProjectModel(myModule.getProject(), myMavenProject.getFile()); } if (domModel != null) { url = MavenPropertyResolver.resolve(url, domModel); } urls.add(url); } } finally { accessToken.finish(); } LibraryTable moduleLibraryTable = myRootModelAdapter.getRootModel().getModuleLibraryTable(); Library library = moduleLibraryTable.getLibraryByName(SUREFIRE_PLUGIN_LIBRARY_NAME); if (library == null) { if (urls.isEmpty()) { return; } library = moduleLibraryTable.createLibrary(SUREFIRE_PLUGIN_LIBRARY_NAME); LibraryOrderEntry orderEntry = myRootModelAdapter.getRootModel().findLibraryOrderEntry(library); orderEntry.setScope(DependencyScope.TEST); } else { if (urls.isEmpty()) { moduleLibraryTable.removeLibrary(library); return; } } String[] oldUrls = library.getUrls(OrderRootType.CLASSES); if (!urls.equals(Arrays.asList(oldUrls))) { Library.ModifiableModel modifiableModel = library.getModifiableModel(); for (String url : oldUrls) { modifiableModel.removeRoot(url, OrderRootType.CLASSES); } for (String url : urls) { modifiableModel.addRoot(url, OrderRootType.CLASSES); } modifiableModel.commit(); } }