mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
general support custom artifact extensions; used for 'aar' artifact packaging
This commit is contained in:
@@ -21,7 +21,7 @@ import java.util.EnumSet;
|
||||
|
||||
public enum ArtifactKind {
|
||||
ARTIFACT("", "jar"), SOURCES("sources", "jar"), JAVADOC("javadoc", "jar"),
|
||||
ANNOTATIONS("annotations", "zip");
|
||||
ANNOTATIONS("annotations", "zip"), AAR_ARTIFACT("", "aar");
|
||||
|
||||
private final String myClassifier;
|
||||
private final String myExtension;
|
||||
@@ -41,6 +41,15 @@ public enum ArtifactKind {
|
||||
return myExtension;
|
||||
}
|
||||
|
||||
public static ArtifactKind find(String classifier, String extension) {
|
||||
for (ArtifactKind kind : ArtifactKind.values()) {
|
||||
if (kind.getClassifier().equals(classifier) && kind.getExtension().equals(extension)) {
|
||||
return kind;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static EnumSet<ArtifactKind> kindsOf(boolean sources, boolean javadoc) {
|
||||
EnumSet<ArtifactKind> result = EnumSet.noneOf(ArtifactKind.class);
|
||||
|
||||
@@ -133,7 +133,14 @@ public class JarRepositoryManager {
|
||||
boolean includeTransitiveDependencies,
|
||||
String copyTo,
|
||||
Collection<RemoteRepositoryDescription> repositories) {
|
||||
RepositoryLibraryProperties props = new RepositoryLibraryProperties(coord, includeTransitiveDependencies);
|
||||
String packaging = JpsMavenRepositoryLibraryDescriptor.DEFAULT_PACKAGING;
|
||||
for (ArtifactKind kind : kinds) {
|
||||
if (kind.getClassifier().isEmpty()) {
|
||||
packaging = kind.getExtension(); // correct packaging according to the requested artifact kind
|
||||
break;
|
||||
}
|
||||
}
|
||||
RepositoryLibraryProperties props = new RepositoryLibraryProperties(coord, packaging, includeTransitiveDependencies);
|
||||
final JpsMavenRepositoryLibraryDescriptor libDescriptor = props.getRepositoryLibraryDescriptor();
|
||||
final Collection<OrderRoot> roots = ContainerUtil.newArrayList();
|
||||
if (libDescriptor.getMavenId() != null) {
|
||||
@@ -155,8 +162,19 @@ public class JarRepositoryManager {
|
||||
boolean includeTransitiveDependencies,
|
||||
String copyTo,
|
||||
Collection<RemoteRepositoryDescription> repositories) {
|
||||
return resolveAndDownload(project, coord, kindsOf(attachSources, attachJavaDoc),
|
||||
includeTransitiveDependencies, copyTo, repositories);
|
||||
return resolveAndDownload(project, coord, attachSources, attachJavaDoc, JpsMavenRepositoryLibraryDescriptor.DEFAULT_PACKAGING, includeTransitiveDependencies, copyTo, repositories);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static NewLibraryConfiguration resolveAndDownload(@NotNull Project project,
|
||||
String coord,
|
||||
boolean attachSources,
|
||||
boolean attachJavaDoc,
|
||||
String packaging,
|
||||
boolean includeTransitiveDependencies,
|
||||
String copyTo,
|
||||
Collection<RemoteRepositoryDescription> repositories) {
|
||||
return resolveAndDownload(project, coord, kindsOf(attachSources, attachJavaDoc, packaging), includeTransitiveDependencies, copyTo, repositories);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -212,7 +230,7 @@ public class JarRepositoryManager {
|
||||
@Nullable Collection<RemoteRepositoryDescription> repositories) {
|
||||
final JpsMavenRepositoryLibraryDescriptor libDescriptor = libraryProps.getRepositoryLibraryDescriptor();
|
||||
if (libDescriptor.getMavenId() != null) {
|
||||
EnumSet<ArtifactKind> kinds = kindsOf(loadSources, loadJavadoc);
|
||||
EnumSet<ArtifactKind> kinds = kindsOf(loadSources, loadJavadoc, libraryProps.getPackaging());
|
||||
return loadDependenciesModal(project, libDescriptor, kinds, repositories, copyTo);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
@@ -236,7 +254,7 @@ public class JarRepositoryManager {
|
||||
boolean loadJavadoc,
|
||||
@Nullable List<RemoteRepositoryDescription> repos,
|
||||
@Nullable String copyTo) {
|
||||
EnumSet<ArtifactKind> kinds = kindsOf(loadSources, loadJavadoc);
|
||||
EnumSet<ArtifactKind> kinds = kindsOf(loadSources, loadJavadoc, libraryProps.getPackaging());
|
||||
return loadDependenciesAsync(
|
||||
project,
|
||||
libraryProps.getRepositoryLibraryDescriptor(),
|
||||
@@ -276,9 +294,19 @@ public class JarRepositoryManager {
|
||||
return repositories;
|
||||
}
|
||||
|
||||
protected static EnumSet<ArtifactKind> kindsOf(boolean loadSources, boolean loadJavadoc) {
|
||||
protected static EnumSet<ArtifactKind> kindsOf(boolean loadSources, boolean loadJavadoc, String... artifactPackaging) {
|
||||
final EnumSet<ArtifactKind> kinds = ArtifactKind.kindsOf(loadSources, loadJavadoc);
|
||||
kinds.add(ArtifactKind.ARTIFACT);
|
||||
if (artifactPackaging.length == 0) {
|
||||
kinds.add(ArtifactKind.ARTIFACT);
|
||||
}
|
||||
else {
|
||||
for (String packaging : artifactPackaging) {
|
||||
final ArtifactKind artifact = ArtifactKind.find(ArtifactKind.ARTIFACT.getClassifier(), packaging);
|
||||
if (artifact != null) {
|
||||
kinds.add(artifact);
|
||||
}
|
||||
}
|
||||
}
|
||||
return kinds;
|
||||
}
|
||||
|
||||
@@ -323,15 +351,19 @@ public class JarRepositoryManager {
|
||||
}
|
||||
|
||||
public static void searchArtifacts(final Project project, String coord, final Consumer<? super Collection<Pair<RepositoryArtifactDescription, RemoteRepositoryDescription>>> resultProcessor) {
|
||||
searchArtifacts(project, coord, JpsMavenRepositoryLibraryDescriptor.DEFAULT_PACKAGING, resultProcessor);
|
||||
}
|
||||
|
||||
public static void searchArtifacts(final Project project, String coord, String packaging, final Consumer<? super Collection<Pair<RepositoryArtifactDescription, RemoteRepositoryDescription>>> resultProcessor) {
|
||||
if (coord == null || coord.length() == 0) {
|
||||
return;
|
||||
}
|
||||
final RepositoryArtifactDescription template;
|
||||
if (coord.indexOf(':') == -1 && Character.isUpperCase(coord.charAt(0))) {
|
||||
template = new RepositoryArtifactDescription(null, null, null, "jar", null, coord, null);
|
||||
template = new RepositoryArtifactDescription(null, null, null, packaging, null, coord, null);
|
||||
}
|
||||
else {
|
||||
template = new RepositoryArtifactDescription(new RepositoryLibraryProperties(coord, true), "jar", null);
|
||||
template = new RepositoryArtifactDescription(new RepositoryLibraryProperties(coord, packaging, true), null);
|
||||
}
|
||||
ProgressManager.getInstance().run(new Task.Backgroundable(project, "Maven", false) {
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ public class RepositoryArtifactDescription {
|
||||
private final String myClassNames;
|
||||
private final String myRepositoryId;
|
||||
|
||||
public RepositoryArtifactDescription(RepositoryLibraryProperties libProperties, String packaging, String classifier) {
|
||||
this(libProperties.getGroupId(), libProperties.getArtifactId(), libProperties.getVersion(), packaging, classifier);
|
||||
public RepositoryArtifactDescription(RepositoryLibraryProperties libProperties, String classifier) {
|
||||
this(libProperties.getGroupId(), libProperties.getArtifactId(), libProperties.getVersion(), libProperties.getPackaging(), classifier);
|
||||
}
|
||||
|
||||
public RepositoryArtifactDescription(String groupId,
|
||||
|
||||
+26
-12
@@ -28,6 +28,10 @@ public class RepositoryLibraryProperties extends LibraryProperties<RepositoryLib
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(mavenId, includeTransitiveDependencies, Collections.emptyList());
|
||||
}
|
||||
|
||||
public RepositoryLibraryProperties(String mavenId, String packaging, final boolean includeTransitiveDependencies) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(mavenId, packaging, includeTransitiveDependencies, Collections.emptyList());
|
||||
}
|
||||
|
||||
public RepositoryLibraryProperties(@NotNull String groupId, @NotNull String artifactId, @NotNull String version) {
|
||||
this(groupId, artifactId, version, true, ContainerUtil.emptyList());
|
||||
}
|
||||
@@ -62,41 +66,51 @@ public class RepositoryLibraryProperties extends LibraryProperties<RepositoryLib
|
||||
|
||||
@Attribute("maven-id")
|
||||
public String getMavenId() {
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getMavenId);
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getMavenId, null);
|
||||
}
|
||||
|
||||
@Attribute("packaging")
|
||||
public String getPackaging() {
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getPackaging, JpsMavenRepositoryLibraryDescriptor.DEFAULT_PACKAGING);
|
||||
}
|
||||
|
||||
public void setMavenId(String mavenId) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(mavenId, isIncludeTransitiveDependencies(), getExcludedDependencies());
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(mavenId, getPackaging(), isIncludeTransitiveDependencies(), getExcludedDependencies());
|
||||
}
|
||||
|
||||
public void setPackaging(String packaging) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), packaging, isIncludeTransitiveDependencies(), getExcludedDependencies());
|
||||
}
|
||||
|
||||
|
||||
@Attribute("include-transitive-deps")
|
||||
public boolean isIncludeTransitiveDependencies() {
|
||||
return myDescriptor == null || myDescriptor.isIncludeTransitiveDependencies();
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::isIncludeTransitiveDependencies, Boolean.TRUE);
|
||||
}
|
||||
|
||||
public void setIncludeTransitiveDependencies(boolean value) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), value, getExcludedDependencies());
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), getPackaging(), value, getExcludedDependencies());
|
||||
}
|
||||
|
||||
public String getGroupId() {
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getGroupId);
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getGroupId, null);
|
||||
}
|
||||
|
||||
public String getArtifactId() {
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getArtifactId);
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getArtifactId, null);
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getVersion);
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getVersion, null);
|
||||
}
|
||||
|
||||
public void changeVersion(String version) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getGroupId(), getArtifactId(), version, myDescriptor.isIncludeTransitiveDependencies(), myDescriptor.getExcludedDependencies());
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getGroupId(), getArtifactId(), version, getPackaging(), isIncludeTransitiveDependencies(), getExcludedDependencies());
|
||||
}
|
||||
|
||||
private String call(Function<? super JpsMavenRepositoryLibraryDescriptor, String> method) {
|
||||
private <T> T call(Function<? super JpsMavenRepositoryLibraryDescriptor, T> method, final T defaultValue) {
|
||||
final JpsMavenRepositoryLibraryDescriptor descriptor = myDescriptor;
|
||||
return descriptor != null ? method.apply(descriptor) : null;
|
||||
return descriptor != null ? method.apply(descriptor) : defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -104,11 +118,11 @@ public class RepositoryLibraryProperties extends LibraryProperties<RepositoryLib
|
||||
*/
|
||||
@Transient
|
||||
public List<String> getExcludedDependencies() {
|
||||
return myDescriptor != null ? myDescriptor.getExcludedDependencies() : Collections.emptyList();
|
||||
return call(JpsMavenRepositoryLibraryDescriptor::getExcludedDependencies, Collections.emptyList());
|
||||
}
|
||||
|
||||
public void setExcludedDependencies(List<String> dependencyMavenIds) {
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), isIncludeTransitiveDependencies(), dependencyMavenIds);
|
||||
myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), getPackaging(), isIncludeTransitiveDependencies(), dependencyMavenIds);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused") //we need to have a separate method here because XmlSerializer fails if the returned list is unmodifiable
|
||||
|
||||
+32
-13
@@ -26,10 +26,13 @@ import java.util.Objects;
|
||||
* @author Eugene Zhuravlev
|
||||
*/
|
||||
public class JpsMavenRepositoryLibraryDescriptor {
|
||||
public static final String DEFAULT_PACKAGING = "jar";
|
||||
|
||||
private final String myMavenId;
|
||||
private final String myGroupId;
|
||||
private final String myArtifactId;
|
||||
private final String myVersion;
|
||||
private final String myPackaging;
|
||||
private final boolean myIncludeTransitiveDependencies;
|
||||
private final List<String> myExcludedDependencies;
|
||||
|
||||
@@ -39,9 +42,15 @@ public class JpsMavenRepositoryLibraryDescriptor {
|
||||
|
||||
public JpsMavenRepositoryLibraryDescriptor(@NotNull String groupId, @NotNull String artifactId, @NotNull String version,
|
||||
boolean includeTransitiveDependencies, @NotNull List<String> excludedDependencies) {
|
||||
this(groupId, artifactId, version, DEFAULT_PACKAGING, includeTransitiveDependencies, excludedDependencies);
|
||||
}
|
||||
|
||||
public JpsMavenRepositoryLibraryDescriptor(@NotNull String groupId, @NotNull String artifactId, @NotNull String version,
|
||||
@NotNull final String packaging, boolean includeTransitiveDependencies, @NotNull List<String> excludedDependencies) {
|
||||
myGroupId = groupId;
|
||||
myArtifactId = artifactId;
|
||||
myVersion = version;
|
||||
myPackaging = packaging;
|
||||
myIncludeTransitiveDependencies = includeTransitiveDependencies;
|
||||
myExcludedDependencies = excludedDependencies;
|
||||
myMavenId = groupId + ":" + artifactId + ":" + version;
|
||||
@@ -56,10 +65,15 @@ public class JpsMavenRepositoryLibraryDescriptor {
|
||||
this(groupId, artifactId, version, includeTransitiveDependencies, Collections.emptyList());
|
||||
}
|
||||
|
||||
public JpsMavenRepositoryLibraryDescriptor(@Nullable String mavenId,
|
||||
boolean includeTransitiveDependencies, List<String> excludedDependencies) {
|
||||
public JpsMavenRepositoryLibraryDescriptor(@Nullable String mavenId, boolean includeTransitiveDependencies, List<String> excludedDependencies) {
|
||||
this(mavenId, DEFAULT_PACKAGING, includeTransitiveDependencies, excludedDependencies);
|
||||
}
|
||||
|
||||
public JpsMavenRepositoryLibraryDescriptor(@Nullable String mavenId, @NotNull String packaging, boolean includeTransitiveDependencies, List<String> excludedDependencies) {
|
||||
myMavenId = mavenId;
|
||||
myIncludeTransitiveDependencies = includeTransitiveDependencies;
|
||||
myExcludedDependencies = excludedDependencies;
|
||||
myPackaging = packaging;
|
||||
if (mavenId == null) {
|
||||
myGroupId = myArtifactId = myVersion = null;
|
||||
}
|
||||
@@ -69,10 +83,8 @@ public class JpsMavenRepositoryLibraryDescriptor {
|
||||
myArtifactId = parts.length > 1 ? parts[1] : null;
|
||||
myVersion = parts.length > 2 ? parts[2] : null;
|
||||
}
|
||||
myExcludedDependencies = excludedDependencies;
|
||||
}
|
||||
|
||||
|
||||
public String getMavenId() {
|
||||
return myMavenId;
|
||||
}
|
||||
@@ -100,19 +112,26 @@ public class JpsMavenRepositoryLibraryDescriptor {
|
||||
return myVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPackaging() {
|
||||
return myPackaging;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
JpsMavenRepositoryLibraryDescriptor that = (JpsMavenRepositoryLibraryDescriptor)o;
|
||||
return Objects.equals(myMavenId, that.myMavenId) && myIncludeTransitiveDependencies == that.myIncludeTransitiveDependencies
|
||||
&& myExcludedDependencies.equals(that.myExcludedDependencies);
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final JpsMavenRepositoryLibraryDescriptor that = (JpsMavenRepositoryLibraryDescriptor)o;
|
||||
return myIncludeTransitiveDependencies == that.myIncludeTransitiveDependencies &&
|
||||
myMavenId.equals(that.myMavenId) &&
|
||||
myPackaging.equals(that.myPackaging) &&
|
||||
myExcludedDependencies.equals(that.myExcludedDependencies);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myExcludedDependencies.hashCode() * 31 * 31 + Objects.hashCode(myMavenId) * 31 + (myIncludeTransitiveDependencies ? 1 : 0);
|
||||
return Objects.hash(myMavenId, myPackaging, myIncludeTransitiveDependencies, myExcludedDependencies);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user