|
43 | 43 | import java.io.Reader; |
44 | 44 | import java.io.StringReader; |
45 | 45 | import java.io.Writer; |
| 46 | +import java.net.MalformedURLException; |
46 | 47 | import java.net.URL; |
47 | 48 | import java.net.URLClassLoader; |
48 | 49 | import java.util.ArrayList; |
49 | 50 | import java.util.List; |
| 51 | +import java.util.jar.JarFile; |
| 52 | +import java.util.jar.Manifest; |
| 53 | +import java.util.jar.Attributes.Name; |
50 | 54 | import java.util.regex.Matcher; |
51 | 55 | import java.util.regex.Pattern; |
52 | 56 |
|
@@ -463,15 +467,49 @@ private static List<Coordinate> getAllDependencies(final BuildEnvironment env) { |
463 | 467 | for (final URL url : ((URLClassLoader)loader).getURLs()) { |
464 | 468 | if (url.getProtocol().equals("file")) { |
465 | 469 | final File file = new File(url.getPath()); |
466 | | - final String artifactId = fakeArtifactId(env, file.getName()); |
467 | | - Coordinate dependency = new Coordinate(DEFAULT_GROUP_ID, artifactId, "1.0.0"); |
468 | | - env.fakePOM(file, dependency); |
469 | | - result.add(dependency); |
| 470 | + if (url.toString().matches(".*/target/surefire/surefirebooter[0-9]*\\.jar")) { |
| 471 | + getSurefireBooterURLs(file, url, env, result); |
| 472 | + continue; |
| 473 | + } |
| 474 | + result.add(fakeDependency(env, file)); |
470 | 475 | } |
471 | 476 | } |
472 | 477 | } |
473 | 478 | } |
474 | 479 | return result; |
475 | 480 | } |
476 | 481 |
|
| 482 | + private static Coordinate fakeDependency(final BuildEnvironment env, final File file) { |
| 483 | + final String artifactId = fakeArtifactId(env, file.getName()); |
| 484 | + Coordinate dependency = new Coordinate(DEFAULT_GROUP_ID, artifactId, "1.0.0"); |
| 485 | + env.fakePOM(file, dependency); |
| 486 | + return dependency; |
| 487 | + } |
| 488 | + |
| 489 | + private static void getSurefireBooterURLs(final File file, final URL baseURL, |
| 490 | + final BuildEnvironment env, final List<Coordinate> result) |
| 491 | + { |
| 492 | + try { |
| 493 | + final JarFile jar = new JarFile(file); |
| 494 | + Manifest manifest = jar.getManifest(); |
| 495 | + if (manifest != null) { |
| 496 | + final String classPath = |
| 497 | + manifest.getMainAttributes().getValue(Name.CLASS_PATH); |
| 498 | + if (classPath != null) { |
| 499 | + for (final String element : classPath.split(" +")) |
| 500 | + try { |
| 501 | + final File dependency = new File(new URL(baseURL, element).getPath()); |
| 502 | + result.add(fakeDependency(env, dependency)); |
| 503 | + } |
| 504 | + catch (MalformedURLException e) { |
| 505 | + e.printStackTrace(); |
| 506 | + } |
| 507 | + } |
| 508 | + } |
| 509 | + } |
| 510 | + catch (final IOException e) { |
| 511 | + e.printStackTrace(); |
| 512 | + } |
| 513 | + } |
| 514 | + |
477 | 515 | } |
0 commit comments