mirror of
https://github.com/apache/maven-mvnd.git
synced 2026-01-13 07:04:14 +08:00
Make TerminalOutput.pathToMaven() more robust to avoid #929
This commit is contained in:
@@ -714,37 +714,45 @@ public class TerminalOutput implements ClientOutput {
|
||||
|
||||
public static String pathToMaven(String location) {
|
||||
String[] p = location.split("/");
|
||||
if (p.length >= 4 && p[p.length - 1].startsWith(p[p.length - 3] + "-" + p[p.length - 2])) {
|
||||
String artifactId = p[p.length - 3];
|
||||
String version = p[p.length - 2];
|
||||
String classifier;
|
||||
String type;
|
||||
String artifactIdVersion = artifactId + "-" + version;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (p[p.length - 1].charAt(artifactIdVersion.length()) == '-') {
|
||||
classifier =
|
||||
p[p.length - 1].substring(artifactIdVersion.length() + 1, p[p.length - 1].lastIndexOf('.'));
|
||||
} else {
|
||||
classifier = null;
|
||||
}
|
||||
type = p[p.length - 1].substring(p[p.length - 1].lastIndexOf('.') + 1);
|
||||
for (int j = 0; j < p.length - 3; j++) {
|
||||
if (j > 0) {
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(p[j]);
|
||||
}
|
||||
sb.append(':').append(artifactId).append(':').append(version);
|
||||
if (!"jar".equals(type) || classifier != null) {
|
||||
sb.append(':');
|
||||
if (!"jar".equals(type)) {
|
||||
sb.append(type);
|
||||
}
|
||||
if (classifier != null) {
|
||||
sb.append(':').append(classifier);
|
||||
if (p.length >= 4) {
|
||||
final String artifactId = p[p.length - 3];
|
||||
final String version = p[p.length - 2];
|
||||
final String fileName = p[p.length - 1];
|
||||
final int artifactIdVersionLength = artifactId.length() + 1 /* the dash */ + version.length();
|
||||
if (fileName.length() > artifactIdVersionLength) {
|
||||
/* We use fileName.length() > to avoid https://github.com/apache/maven-mvnd/issues/929
|
||||
* In the code below, we assume that the fileName ends either with `.<extension>`
|
||||
* or `-<classifier>.<extension>` */
|
||||
final int lastPeriodPos = fileName.lastIndexOf('.');
|
||||
if (lastPeriodPos >= 0) {
|
||||
final String classifier;
|
||||
final String type;
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
if (fileName.charAt(artifactIdVersionLength) == '-') {
|
||||
classifier = fileName.substring(artifactIdVersionLength + 1, lastPeriodPos);
|
||||
} else {
|
||||
classifier = null;
|
||||
}
|
||||
type = fileName.substring(lastPeriodPos + 1);
|
||||
for (int j = 0; j < p.length - 3; j++) {
|
||||
if (j > 0) {
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(p[j]);
|
||||
}
|
||||
sb.append(':').append(artifactId).append(':').append(version);
|
||||
if (!"jar".equals(type) || classifier != null) {
|
||||
sb.append(':');
|
||||
if (!"jar".equals(type)) {
|
||||
sb.append(type);
|
||||
}
|
||||
if (classifier != null) {
|
||||
sb.append(':').append(classifier);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
return location;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user