@@ -367,10 +367,11 @@ private static <A, B, C> Stream<Pair<A, B>> flatMap(Pair<A, C> pair, Function<C,
367367 }
368368
369369 private static final Pattern VERSION_PATTERN =
370- Pattern .compile ("(0|[1-9]\\ d*)(?:\\ .(0|[1-9]\\ d*))?(?:\\ .(0|[1-9]\\ d*))?"
371- + "(?:-((?:(?:[0-9]+[a-zA-Z-][\\ w-]*)|(?:[a-zA-Z][\\ w-]*)|(?:[1-9]\\ d*)|0)"
372- + "(?:\\ .(?:(?:[0-9]+[a-zA-Z-][\\ w-]*)|(?:[a-zA-Z][\\ w-]*)|(?:[1-9]\\ d*)|0))*))?"
373- + "(?:\\ +([\\ w-]+(\\ .[\\ w-]+)*))?" );
370+ Pattern .compile ("(0|[1-9]\\ d*)" +
371+ "(?:\\ .(0|[1-9]\\ d*))?" +
372+ "(?:\\ .(0|[1-9]\\ d*))?" +
373+ "(?:-((?:0|[1-9]\\ d*|\\ d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\ .(?:0|[1-9]\\ d*|\\ d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
374+ "(?:\\ +([0-9a-zA-Z-]+(?:\\ .[0-9a-zA-Z-]+)*))?" );
374375
375376 private enum DependencySide {
376377 COMMON ,
@@ -505,23 +506,7 @@ private static void scanDeps() {
505506 }
506507 val groupId = parts [0 ];
507508 val artifactId = parts [1 ];
508- Version version ;
509- try {
510- val matcher = VERSION_PATTERN .matcher (parts [2 ]);
511- if (!matcher .matches ()) {
512- throw new IllegalArgumentException ("Invalid version: " + parts [2 ]);
513- }
514- val major = Integer .parseInt (matcher .group (1 ));
515- val minor = matcher .group (2 ) == null ? -1
516- : Integer .parseInt (matcher .group (2 ));
517- val patch = matcher .group (3 ) == null ? -1
518- : Integer .parseInt (matcher .group (3 ));
519- val preRelease = matcher .group (4 );
520- val build = matcher .group (5 );
521- version = new SemanticVersion (major , minor , patch , preRelease , build );
522- } catch (IllegalArgumentException e ) {
523- version = new RawVersion (parts [2 ]);
524- }
509+ Version version = parseVersion (parts [2 ]);
525510 final String classifier = parts .length > 3 ? parts [3 ] : null ;
526511 if (classifier != null ) {
527512 LOG .info ("Found dependency: {}:{}:{}:{} from {}" ,
@@ -552,6 +537,25 @@ private static void scanDeps() {
552537 tasks = new ArrayList <>(artifacts );
553538 }
554539
540+ public static Version parseVersion (String versionString ) {
541+ try {
542+ val matcher = VERSION_PATTERN .matcher (versionString );
543+ if (!matcher .matches ()) {
544+ return new RawVersion (versionString );
545+ }
546+ val major = Integer .parseInt (matcher .group (1 ));
547+ val minor = matcher .group (2 ) == null ? -1
548+ : Integer .parseInt (matcher .group (2 ));
549+ val patch = matcher .group (3 ) == null ? -1
550+ : Integer .parseInt (matcher .group (3 ));
551+ val preRelease = matcher .group (4 );
552+ val build = matcher .group (5 );
553+ return new SemanticVersion (major , minor , patch , preRelease , build );
554+ } catch (Exception e ) {
555+ return new RawVersion (versionString );
556+ }
557+ }
558+
555559 private static class SideAwareAssistant {
556560 static ScopeSide current () {
557561 return new ScopeSide (Share .DEV_ENV ? DependencyScope .DEV : DependencyScope .OBF , FMLLaunchHandler .side () == Side .CLIENT ? DependencySide .CLIENT : DependencySide .SERVER );
0 commit comments