/** * Resolve artifact * * @param settings the settings * @param dependency the canonical form of the dependency * @param scope the scope, one of "compile", "runtime", "provided", "test", "system", "import" * @param excludes canonical names of the dependencies to be excluded * @return the resolved Maven artifacts */ public MavenResolvedArtifact[] resolveArtifact( String dependency, String scope, String[] excludes) { final String mavenSettingsFile = settings.get("apps.settings", DEFAULT_SETTINGS); final boolean useMavenCentral = settings.getAsBoolean("apps.usemavencentral", Boolean.TRUE); final String[] defaultExcludes = settings.getAsArray("apps.excludes", DEFAULT_EXCLUDE); final MavenDependencyExclusion[] exclusions = new MavenDependencyExclusion [defaultExcludes.length + (excludes != null ? excludes.length : 0)]; for (int i = 0; i < defaultExcludes.length; i++) { exclusions[i] = MavenDependencies.createExclusion(defaultExcludes[i]); } if (excludes != null) { for (int i = 0; i < excludes.length; i++) { exclusions[defaultExcludes.length + i] = MavenDependencies.createExclusion(excludes[i]); } } ScopeType scopeType = scope != null ? ScopeType.fromScopeType(scope) : ScopeType.RUNTIME; // optional = false MavenDependency dep = MavenDependencies.createDependency(dependency, scopeType, false, exclusions); return Maven.configureResolver() .fromFile(mavenSettingsFile) .addDependencies(dep) .resolve() .withMavenCentralRepo(useMavenCentral) .using(new AcceptScopesStrategy(scopeType)) .asResolvedArtifact(); }
/** * Helper method for refreshing all declared artifact apps * * @return a map of artifact apps that are present after refreshing */ private Map<String, ArtifactApp> refreshArtifactApps() { final String mavenSettingsFile = settings.get("apps.settings", DEFAULT_SETTINGS); final boolean useMavenCentral = settings.getAsBoolean("apps.usemavencentral", Boolean.TRUE); final Map<String, Settings> appSettings = settings.getGroups("apps.dependencies"); final String[] defaultExcludes = settings.getAsArray("apps.excludes", DEFAULT_EXCLUDE); Set<MavenDependency> defaultDeps = Sets.newHashSet(); for (Map.Entry<String, Settings> entry : appSettings.entrySet()) { String name = entry.getKey(); // not used yet boolean enabled = entry.getValue().getAsBoolean("enabled", Boolean.TRUE); if (enabled) { String dependency = entry.getValue().get("dependency"); String[] excludes = entry.getValue().getAsArray("exclude"); MavenDependencyExclusion[] exclusions = new MavenDependencyExclusion[defaultExcludes.length + excludes.length]; for (int i = 0; i < defaultExcludes.length; i++) { exclusions[i] = MavenDependencies.createExclusion(defaultExcludes[i]); } for (int i = 0; i < excludes.length; i++) { exclusions[defaultExcludes.length + i] = MavenDependencies.createExclusion(excludes[i]); } ScopeType scopeType = ScopeType.RUNTIME; defaultDeps.add( MavenDependencies.createDependency(dependency, scopeType, false, exclusions)); } } MavenResolvedArtifact[] artifacts = defaultDeps.isEmpty() ? null : Maven.configureResolver() .fromFile(mavenSettingsFile) .addDependencies(defaultDeps) .resolve() .withMavenCentralRepo(useMavenCentral) .withTransitivity() .asResolvedArtifact(); return loadArtifacts(artifacts); }
private Set<App> whatRequires(String dependency, Set<String> visited) { final String mavenSettingsFile = settings.get("apps.settings", DEFAULT_SETTINGS); final boolean useMavenCentral = settings.getAsBoolean("apps.usemavencentral", Boolean.TRUE); final String[] defaultExcludes = settings.getAsArray("apps.excludes", DEFAULT_EXCLUDE); Set<App> foundDeps = Sets.newHashSet(); for (App app : artifactApps.values()) { MavenDependencyExclusion[] exclusions = new MavenDependencyExclusion[defaultExcludes.length]; for (int i = 0; i < defaultExcludes.length; i++) { exclusions[i] = MavenDependencies.createExclusion(defaultExcludes[i]); } MavenDependency dep = MavenDependencies.createDependency( app.getCanonicalForm(), ScopeType.RUNTIME, false, exclusions); MavenResolvedArtifact[] artifacts = Maven.configureResolver() .fromFile(mavenSettingsFile) .addDependencies(dep) .resolve() .withMavenCentralRepo(useMavenCentral) .withTransitivity() .asResolvedArtifact(); if (artifacts != null && artifacts.length > 0) { visited.add(artifacts[0].getCoordinate().toCanonicalForm()); for (MavenResolvedArtifact artifact : artifacts) { String artifactName = artifact.getCoordinate().toCanonicalForm(); if (artifactName.startsWith(dependency)) { foundDeps.add(app); } else if (!visited.contains(artifactName)) { visited.add(artifactName); foundDeps.addAll(whatRequires(artifactName, visited)); } } } } return foundDeps; }
private Set<DependencyInfo> dependencyTree( String dependency, Set<DependencyInfo> visited, int level) { final String mavenSettingsFile = settings.get("apps.settings", DEFAULT_SETTINGS); final boolean useMavenCentral = settings.getAsBoolean("apps.usemavencentral", Boolean.TRUE); final String[] defaultExcludes = settings.getAsArray("apps.excludes", DEFAULT_EXCLUDE); MavenDependencyExclusion[] exclusions = new MavenDependencyExclusion[defaultExcludes.length]; for (int i = 0; i < defaultExcludes.length; i++) { exclusions[i] = MavenDependencies.createExclusion(defaultExcludes[i]); } MavenDependency dep = MavenDependencies.createDependency(dependency, ScopeType.RUNTIME, false, exclusions); MavenResolvedArtifact[] artifacts = Maven.configureResolver() .fromFile(mavenSettingsFile) .addDependencies(dep) .resolve() .withMavenCentralRepo(useMavenCentral) .withTransitivity() .asResolvedArtifact(); Set<DependencyInfo> foundDeps = Sets.newLinkedHashSet(); if (artifacts != null && artifacts.length > 0) { DependencyInfo info = new DependencyInfo(artifacts[0], level); visited.add(info); foundDeps.add(info); for (MavenResolvedArtifact artifact : artifacts) { String artifactName = artifact.getCoordinate().toCanonicalForm(); info = new DependencyInfo(artifact, level + 1); if (!visited.contains(info)) { visited.add(info); foundDeps.add(info); foundDeps.addAll(dependencyTree(artifactName, visited, level + 1)); } } } return foundDeps; }
/** * Remove artifact(s). * * @param settings * @param dependency */ public void removeArtifacts(String dependency) { String mavenSettingsFile = settings.get("apps.settings", DEFAULT_SETTINGS); MavenDependency dep = MavenDependencies.createDependency(dependency, ScopeType.RUNTIME, false); File[] artifactFiles = Maven.configureResolver() .fromFile(mavenSettingsFile) .offline() .addDependency(dep) .resolve() .withoutTransitivity() .asFile(); if (artifactFiles != null) { for (File artifactFile : artifactFiles) { // parent is the version file, a directory logger.warn("deleting {}", artifactFile.getParent()); deleteDirectory(artifactFile.getParentFile()); } } }