@xpertss/projen-types 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.jsii +2598 -746
  2. package/API.md +5752 -1419
  3. package/README.md +274 -35
  4. package/lib/actions/action-build-workflow.js +1 -1
  5. package/lib/actions/action-dogfood-workflow.js +1 -1
  6. package/lib/actions/action-sonar-workflow.js +1 -1
  7. package/lib/actions/github-action-project.d.ts +5 -0
  8. package/lib/actions/github-action-project.js +10 -3
  9. package/lib/cdk/app-runtime-scaffold.js +1 -1
  10. package/lib/cdk/cdk-app-project.js +1 -1
  11. package/lib/cdk/cdk-infra-project.js +1 -1
  12. package/lib/cdk/cdk-typescript-base.js +10 -3
  13. package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
  14. package/lib/cdk/components/edge-networking-constructs.js +1 -1
  15. package/lib/cdk/database-component.js +1 -1
  16. package/lib/cdk/options.d.ts +5 -0
  17. package/lib/cdk/options.js +1 -1
  18. package/lib/common/ci-steps.d.ts +14 -0
  19. package/lib/common/ci-steps.js +30 -0
  20. package/lib/common/editorconfig.d.ts +12 -0
  21. package/lib/common/editorconfig.js +44 -0
  22. package/lib/common/projen-drift-check-workflow.js +5 -15
  23. package/lib/common/workflow-change-notice-workflow.js +1 -1
  24. package/lib/index.d.ts +4 -0
  25. package/lib/index.js +5 -1
  26. package/lib/java/components/cdk-deploy-hook.d.ts +2 -2
  27. package/lib/java/components/cdk-deploy-hook.js +2 -2
  28. package/lib/java/components/code-index-workflow.d.ts +2 -2
  29. package/lib/java/components/code-index-workflow.js +5 -3
  30. package/lib/java/components/docker-publish.d.ts +2 -2
  31. package/lib/java/components/docker-publish.js +2 -2
  32. package/lib/java/components/flyway-migration.d.ts +8 -3
  33. package/lib/java/components/flyway-migration.js +11 -5
  34. package/lib/java/components/github-packages-publish.d.ts +2 -2
  35. package/lib/java/components/github-packages-publish.js +2 -2
  36. package/lib/java/components/maven-central-publish.d.ts +2 -2
  37. package/lib/java/components/maven-central-publish.js +2 -2
  38. package/lib/java/components/maven-upgrade-report.d.ts +22 -0
  39. package/lib/java/components/maven-upgrade-report.js +61 -0
  40. package/lib/java/java-app-project.js +1 -1
  41. package/lib/java/java-library-project.d.ts +5 -1
  42. package/lib/java/java-library-project.js +14 -3
  43. package/lib/java/java-maven-base.d.ts +91 -8
  44. package/lib/java/java-maven-base.js +339 -24
  45. package/lib/java/java-service-project.d.ts +17 -5
  46. package/lib/java/java-service-project.js +20 -7
  47. package/lib/java/java-spring-boot-project.d.ts +30 -0
  48. package/lib/java/java-spring-boot-project.js +68 -0
  49. package/lib/java/java-versions.d.ts +40 -0
  50. package/lib/java/java-versions.js +106 -0
  51. package/lib/java/maven/maven-module.d.ts +47 -0
  52. package/lib/java/maven/maven-module.js +99 -0
  53. package/lib/java/maven/maven-pom.d.ts +143 -0
  54. package/lib/java/maven/maven-pom.js +337 -0
  55. package/lib/java/options.d.ts +128 -1
  56. package/lib/java/options.js +1 -1
  57. package/package.json +1 -1
  58. package/lib/common/upgrade-workflow.d.ts +0 -18
  59. package/lib/common/upgrade-workflow.js +0 -45
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JavaSpringBootProject = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const java_maven_base_1 = require("./java-maven-base");
6
+ const java_versions_1 = require("./java-versions");
7
+ const maven_pom_1 = require("./maven/maven-pom");
8
+ const REPACKAGE = { executions: [{ id: 'repackage', goals: ['repackage'] }] };
9
+ /**
10
+ * Spring Boot on Maven, single- or multi-module, with no Docker, Flyway or
11
+ * CDK - `JavaMavenProject` plus Spring Boot dependency management.
12
+ *
13
+ * - `spring-boot-dependencies` is imported as the first BOM, so starters and
14
+ * the libraries Boot manages (JUnit included) are added versionless.
15
+ * - `spring-boot-maven-plugin` is versioned in `<pluginManagement>`. A
16
+ * single-module project repackages its root jar into an executable one.
17
+ * In a multi-module project only modules added with
18
+ * `addSpringBootModule()` are repackaged; `addModule()` modules stay plain
19
+ * jars (shared libraries, clients, ...).
20
+ *
21
+ * `JavaServiceProject` builds on this and adds Docker publishing, Flyway,
22
+ * and a CDK deploy hook.
23
+ */
24
+ class JavaSpringBootProject extends java_maven_base_1.JavaMavenProject {
25
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaSpringBootProject", version: "0.0.14" };
26
+ /** The Spring Boot version (BOM and Maven plugin). */
27
+ springBootVersion;
28
+ constructor(options) {
29
+ super(options);
30
+ const version = options.springBootVersion ?? this.pinnedVersion(java_versions_1.SPRING_BOOT_BOM);
31
+ (0, maven_pom_1.assertExactVersion)(version, 'springBootVersion');
32
+ const major = parseInt(version.split('.')[0], 10);
33
+ const maxMajor = this.maxSpringBootMajor();
34
+ if (maxMajor !== undefined && major > maxMajor) {
35
+ throw new Error(`Spring Boot ${version} does not run on javaVersion ${this.javaVersion} (the newest Spring Boot line for it is ${maxMajor}.x). Use a ${maxMajor}.x springBootVersion, or a newer javaVersion.`);
36
+ }
37
+ this.springBootVersion = version;
38
+ // Boot's BOM manages JUnit, so the base type's junit-bom would only
39
+ // compete with it.
40
+ this.pom.removeBom(java_versions_1.JUNIT_BOM);
41
+ this.pom.addBom(`${java_versions_1.SPRING_BOOT_BOM}@${version}`);
42
+ this.pom.addManagedPlugin(`${java_versions_1.SPRING_BOOT_MAVEN_PLUGIN}@${version}`);
43
+ // A repackaged jar no longer exposes its classes at the top level, so
44
+ // failsafe tests against the compiled classes, as spring-boot-starter-
45
+ // parent configures it.
46
+ this.addPlugin(java_versions_1.MAVEN_FAILSAFE_PLUGIN, {
47
+ configuration: { classesDirectory: '${project.build.outputDirectory}' },
48
+ });
49
+ }
50
+ /**
51
+ * Adds a module that is a Spring Boot application: like `addModule()`, plus
52
+ * `spring-boot-maven-plugin`'s `repackage`, which turns the module's jar
53
+ * into an executable one.
54
+ */
55
+ addSpringBootModule(options) {
56
+ const module = this.addModule(options);
57
+ module.addPlugin(java_versions_1.SPRING_BOOT_MAVEN_PLUGIN, REPACKAGE);
58
+ return module;
59
+ }
60
+ preSynthesize() {
61
+ super.preSynthesize();
62
+ if (this.modules.length === 0 && !this.pom.hasPlugin(java_versions_1.SPRING_BOOT_MAVEN_PLUGIN)) {
63
+ this.addPlugin(java_versions_1.SPRING_BOOT_MAVEN_PLUGIN, REPACKAGE);
64
+ }
65
+ }
66
+ }
67
+ exports.JavaSpringBootProject = JavaSpringBootProject;
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1zcHJpbmctYm9vdC1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1zcHJpbmctYm9vdC1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx1REFBcUQ7QUFDckQsbURBS3lCO0FBRXpCLGlEQUF1RDtBQUd2RCxNQUFNLFNBQVMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUU5RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEscUJBQXNCLFNBQVEsa0NBQWdCOztJQUN6RCxzREFBc0Q7SUFDdEMsaUJBQWlCLENBQVM7SUFFMUMsWUFBWSxPQUFxQztRQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBZSxDQUFDLENBQUM7UUFDakYsSUFBQSw4QkFBa0IsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ2IsZUFBZSxPQUFPLGdDQUFnQyxJQUFJLENBQUMsV0FBVywyQ0FBMkMsUUFBUSxjQUFjLFFBQVEsK0NBQStDLENBQy9MLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUVqQyxvRUFBb0U7UUFDcEUsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLHlCQUFTLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLCtCQUFlLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsd0NBQXdCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLHFDQUFxQixFQUFFO1lBQ3BDLGFBQWEsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGtDQUFrQyxFQUFFO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsT0FBMkI7UUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsU0FBUyxDQUFDLHdDQUF3QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhO1FBQ2xCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLHdDQUF3QixDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsU0FBUyxDQUFDLHdDQUF3QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDOztBQS9DSCxzREFnREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKYXZhTWF2ZW5Qcm9qZWN0IH0gZnJvbSAnLi9qYXZhLW1hdmVuLWJhc2UnO1xuaW1wb3J0IHtcbiAgSlVOSVRfQk9NLFxuICBNQVZFTl9GQUlMU0FGRV9QTFVHSU4sXG4gIFNQUklOR19CT09UX0JPTSxcbiAgU1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOLFxufSBmcm9tICcuL2phdmEtdmVyc2lvbnMnO1xuaW1wb3J0IHsgTWF2ZW5Nb2R1bGUgfSBmcm9tICcuL21hdmVuL21hdmVuLW1vZHVsZSc7XG5pbXBvcnQgeyBhc3NlcnRFeGFjdFZlcnNpb24gfSBmcm9tICcuL21hdmVuL21hdmVuLXBvbSc7XG5pbXBvcnQgeyBKYXZhU3ByaW5nQm9vdFByb2plY3RPcHRpb25zLCBNYXZlbk1vZHVsZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5jb25zdCBSRVBBQ0tBR0UgPSB7IGV4ZWN1dGlvbnM6IFt7IGlkOiAncmVwYWNrYWdlJywgZ29hbHM6IFsncmVwYWNrYWdlJ10gfV0gfTtcblxuLyoqXG4gKiBTcHJpbmcgQm9vdCBvbiBNYXZlbiwgc2luZ2xlLSBvciBtdWx0aS1tb2R1bGUsIHdpdGggbm8gRG9ja2VyLCBGbHl3YXkgb3JcbiAqIENESyAtIGBKYXZhTWF2ZW5Qcm9qZWN0YCBwbHVzIFNwcmluZyBCb290IGRlcGVuZGVuY3kgbWFuYWdlbWVudC5cbiAqXG4gKiAtIGBzcHJpbmctYm9vdC1kZXBlbmRlbmNpZXNgIGlzIGltcG9ydGVkIGFzIHRoZSBmaXJzdCBCT00sIHNvIHN0YXJ0ZXJzIGFuZFxuICogICB0aGUgbGlicmFyaWVzIEJvb3QgbWFuYWdlcyAoSlVuaXQgaW5jbHVkZWQpIGFyZSBhZGRlZCB2ZXJzaW9ubGVzcy5cbiAqIC0gYHNwcmluZy1ib290LW1hdmVuLXBsdWdpbmAgaXMgdmVyc2lvbmVkIGluIGA8cGx1Z2luTWFuYWdlbWVudD5gLiBBXG4gKiAgIHNpbmdsZS1tb2R1bGUgcHJvamVjdCByZXBhY2thZ2VzIGl0cyByb290IGphciBpbnRvIGFuIGV4ZWN1dGFibGUgb25lLlxuICogICBJbiBhIG11bHRpLW1vZHVsZSBwcm9qZWN0IG9ubHkgbW9kdWxlcyBhZGRlZCB3aXRoXG4gKiAgIGBhZGRTcHJpbmdCb290TW9kdWxlKClgIGFyZSByZXBhY2thZ2VkOyBgYWRkTW9kdWxlKClgIG1vZHVsZXMgc3RheSBwbGFpblxuICogICBqYXJzIChzaGFyZWQgbGlicmFyaWVzLCBjbGllbnRzLCAuLi4pLlxuICpcbiAqIGBKYXZhU2VydmljZVByb2plY3RgIGJ1aWxkcyBvbiB0aGlzIGFuZCBhZGRzIERvY2tlciBwdWJsaXNoaW5nLCBGbHl3YXksXG4gKiBhbmQgYSBDREsgZGVwbG95IGhvb2suXG4gKi9cbmV4cG9ydCBjbGFzcyBKYXZhU3ByaW5nQm9vdFByb2plY3QgZXh0ZW5kcyBKYXZhTWF2ZW5Qcm9qZWN0IHtcbiAgLyoqIFRoZSBTcHJpbmcgQm9vdCB2ZXJzaW9uIChCT00gYW5kIE1hdmVuIHBsdWdpbikuICovXG4gIHB1YmxpYyByZWFkb25seSBzcHJpbmdCb290VmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEphdmFTcHJpbmdCb290UHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnNwcmluZ0Jvb3RWZXJzaW9uID8/IHRoaXMucGlubmVkVmVyc2lvbihTUFJJTkdfQk9PVF9CT00pO1xuICAgIGFzc2VydEV4YWN0VmVyc2lvbih2ZXJzaW9uLCAnc3ByaW5nQm9vdFZlcnNpb24nKTtcbiAgICBjb25zdCBtYWpvciA9IHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSwgMTApO1xuICAgIGNvbnN0IG1heE1ham9yID0gdGhpcy5tYXhTcHJpbmdCb290TWFqb3IoKTtcbiAgICBpZiAobWF4TWFqb3IgIT09IHVuZGVmaW5lZCAmJiBtYWpvciA+IG1heE1ham9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTcHJpbmcgQm9vdCAke3ZlcnNpb259IGRvZXMgbm90IHJ1biBvbiBqYXZhVmVyc2lvbiAke3RoaXMuamF2YVZlcnNpb259ICh0aGUgbmV3ZXN0IFNwcmluZyBCb290IGxpbmUgZm9yIGl0IGlzICR7bWF4TWFqb3J9LngpLiBVc2UgYSAke21heE1ham9yfS54IHNwcmluZ0Jvb3RWZXJzaW9uLCBvciBhIG5ld2VyIGphdmFWZXJzaW9uLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnNwcmluZ0Jvb3RWZXJzaW9uID0gdmVyc2lvbjtcblxuICAgIC8vIEJvb3QncyBCT00gbWFuYWdlcyBKVW5pdCwgc28gdGhlIGJhc2UgdHlwZSdzIGp1bml0LWJvbSB3b3VsZCBvbmx5XG4gICAgLy8gY29tcGV0ZSB3aXRoIGl0LlxuICAgIHRoaXMucG9tLnJlbW92ZUJvbShKVU5JVF9CT00pO1xuICAgIHRoaXMucG9tLmFkZEJvbShgJHtTUFJJTkdfQk9PVF9CT019QCR7dmVyc2lvbn1gKTtcbiAgICB0aGlzLnBvbS5hZGRNYW5hZ2VkUGx1Z2luKGAke1NQUklOR19CT09UX01BVkVOX1BMVUdJTn1AJHt2ZXJzaW9ufWApO1xuICAgIC8vIEEgcmVwYWNrYWdlZCBqYXIgbm8gbG9uZ2VyIGV4cG9zZXMgaXRzIGNsYXNzZXMgYXQgdGhlIHRvcCBsZXZlbCwgc29cbiAgICAvLyBmYWlsc2FmZSB0ZXN0cyBhZ2FpbnN0IHRoZSBjb21waWxlZCBjbGFzc2VzLCBhcyBzcHJpbmctYm9vdC1zdGFydGVyLVxuICAgIC8vIHBhcmVudCBjb25maWd1cmVzIGl0LlxuICAgIHRoaXMuYWRkUGx1Z2luKE1BVkVOX0ZBSUxTQUZFX1BMVUdJTiwge1xuICAgICAgY29uZmlndXJhdGlvbjogeyBjbGFzc2VzRGlyZWN0b3J5OiAnJHtwcm9qZWN0LmJ1aWxkLm91dHB1dERpcmVjdG9yeX0nIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG1vZHVsZSB0aGF0IGlzIGEgU3ByaW5nIEJvb3QgYXBwbGljYXRpb246IGxpa2UgYGFkZE1vZHVsZSgpYCwgcGx1c1xuICAgKiBgc3ByaW5nLWJvb3QtbWF2ZW4tcGx1Z2luYCdzIGByZXBhY2thZ2VgLCB3aGljaCB0dXJucyB0aGUgbW9kdWxlJ3MgamFyXG4gICAqIGludG8gYW4gZXhlY3V0YWJsZSBvbmUuXG4gICAqL1xuICBwdWJsaWMgYWRkU3ByaW5nQm9vdE1vZHVsZShvcHRpb25zOiBNYXZlbk1vZHVsZU9wdGlvbnMpOiBNYXZlbk1vZHVsZSB7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5hZGRNb2R1bGUob3B0aW9ucyk7XG4gICAgbW9kdWxlLmFkZFBsdWdpbihTUFJJTkdfQk9PVF9NQVZFTl9QTFVHSU4sIFJFUEFDS0FHRSk7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgICBpZiAodGhpcy5tb2R1bGVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5wb20uaGFzUGx1Z2luKFNQUklOR19CT09UX01BVkVOX1BMVUdJTikpIHtcbiAgICAgIHRoaXMuYWRkUGx1Z2luKFNQUklOR19CT09UX01BVkVOX1BMVUdJTiwgUkVQQUNLQUdFKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ /** `groupId/artifactId` keys for the versions this package pins by default. */
2
+ export declare const MAVEN_COMPILER_PLUGIN = "org.apache.maven.plugins/maven-compiler-plugin";
3
+ export declare const MAVEN_SUREFIRE_PLUGIN = "org.apache.maven.plugins/maven-surefire-plugin";
4
+ export declare const MAVEN_FAILSAFE_PLUGIN = "org.apache.maven.plugins/maven-failsafe-plugin";
5
+ export declare const MAVEN_JAR_PLUGIN = "org.apache.maven.plugins/maven-jar-plugin";
6
+ export declare const MAVEN_ENFORCER_PLUGIN = "org.apache.maven.plugins/maven-enforcer-plugin";
7
+ export declare const MAVEN_JAVADOC_PLUGIN = "org.apache.maven.plugins/maven-javadoc-plugin";
8
+ export declare const MAVEN_SOURCE_PLUGIN = "org.apache.maven.plugins/maven-source-plugin";
9
+ export declare const JUNIT_BOM = "org.junit/junit-bom";
10
+ export declare const SPRING_BOOT_BOM = "org.springframework.boot/spring-boot-dependencies";
11
+ export declare const SPRING_BOOT_MAVEN_PLUGIN = "org.springframework.boot/spring-boot-maven-plugin";
12
+ export declare const FLYWAY_MAVEN_PLUGIN = "org.flywaydb/flyway-maven-plugin";
13
+ export declare const VERSIONS_MAVEN_PLUGIN = "org.codehaus.mojo/versions-maven-plugin";
14
+ /** The Java line used when a project sets no `javaVersion`. */
15
+ export declare const DEFAULT_JAVA_VERSION = "21";
16
+ /** The minimum Maven version the enforcer requires by default. */
17
+ export declare const DEFAULT_MIN_MAVEN_VERSION = "3.9";
18
+ /** Everything a generated build derives from its Java line. */
19
+ export interface JavaLineProfile {
20
+ /** Canonical line id, as written in `javaVersion` (`1.8`, `17`, ...). */
21
+ readonly line: string;
22
+ /** `<properties>` that set the compiler level. */
23
+ readonly compilerProperties: Record<string, string>;
24
+ /** The enforcer's `requireJavaVersion` range. */
25
+ readonly enforcerJavaRange: string;
26
+ /** `actions/setup-java`'s `java-version` input. */
27
+ readonly setupJavaVersion: string;
28
+ /** Default exact versions, keyed by `groupId/artifactId`. */
29
+ readonly versions: Record<string, string>;
30
+ /** Newest Spring Boot major that runs on this line, if it is capped. */
31
+ readonly maxSpringBootMajor?: number;
32
+ }
33
+ /** The Java lines `javaVersion` accepts, in ascending order. */
34
+ export declare function supportedJavaVersions(): string[];
35
+ /**
36
+ * Resolves a `javaVersion` option to its line profile, applying
37
+ * `versionOverrides` (`groupId/artifactId` -> exact version) on top of the
38
+ * line's defaults. Throws, listing the supported lines, on an unknown line.
39
+ */
40
+ export declare function resolveJavaLine(javaVersion: string | undefined, versionOverrides?: Record<string, string>): JavaLineProfile;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ // Every Java-line-dependent value a generated Maven build uses lives in this
3
+ // file, grouped by Java line (F013 §4). Nothing else in `src/java` may
4
+ // hard-code a Java version or a default plugin/BOM version - adding a Java
5
+ // line is one new entry in JAVA_LINES. Versions are exact pins, verified
6
+ // against Maven Central (and, for plugins, run on the oldest JDK of the line
7
+ // they are listed for) when they were last bumped.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_MIN_MAVEN_VERSION = exports.DEFAULT_JAVA_VERSION = exports.VERSIONS_MAVEN_PLUGIN = exports.FLYWAY_MAVEN_PLUGIN = exports.SPRING_BOOT_MAVEN_PLUGIN = exports.SPRING_BOOT_BOM = exports.JUNIT_BOM = exports.MAVEN_SOURCE_PLUGIN = exports.MAVEN_JAVADOC_PLUGIN = exports.MAVEN_ENFORCER_PLUGIN = exports.MAVEN_JAR_PLUGIN = exports.MAVEN_FAILSAFE_PLUGIN = exports.MAVEN_SUREFIRE_PLUGIN = exports.MAVEN_COMPILER_PLUGIN = void 0;
10
+ exports.supportedJavaVersions = supportedJavaVersions;
11
+ exports.resolveJavaLine = resolveJavaLine;
12
+ /** `groupId/artifactId` keys for the versions this package pins by default. */
13
+ exports.MAVEN_COMPILER_PLUGIN = 'org.apache.maven.plugins/maven-compiler-plugin';
14
+ exports.MAVEN_SUREFIRE_PLUGIN = 'org.apache.maven.plugins/maven-surefire-plugin';
15
+ exports.MAVEN_FAILSAFE_PLUGIN = 'org.apache.maven.plugins/maven-failsafe-plugin';
16
+ exports.MAVEN_JAR_PLUGIN = 'org.apache.maven.plugins/maven-jar-plugin';
17
+ exports.MAVEN_ENFORCER_PLUGIN = 'org.apache.maven.plugins/maven-enforcer-plugin';
18
+ exports.MAVEN_JAVADOC_PLUGIN = 'org.apache.maven.plugins/maven-javadoc-plugin';
19
+ exports.MAVEN_SOURCE_PLUGIN = 'org.apache.maven.plugins/maven-source-plugin';
20
+ exports.JUNIT_BOM = 'org.junit/junit-bom';
21
+ exports.SPRING_BOOT_BOM = 'org.springframework.boot/spring-boot-dependencies';
22
+ exports.SPRING_BOOT_MAVEN_PLUGIN = 'org.springframework.boot/spring-boot-maven-plugin';
23
+ exports.FLYWAY_MAVEN_PLUGIN = 'org.flywaydb/flyway-maven-plugin';
24
+ exports.VERSIONS_MAVEN_PLUGIN = 'org.codehaus.mojo/versions-maven-plugin';
25
+ /** The Java line used when a project sets no `javaVersion`. */
26
+ exports.DEFAULT_JAVA_VERSION = '21';
27
+ /** The minimum Maven version the enforcer requires by default. */
28
+ exports.DEFAULT_MIN_MAVEN_VERSION = '3.9';
29
+ // Maven plugins that run on every supported JDK (all of them require only
30
+ // Java 8 at runtime), so they are shared by every line.
31
+ const SHARED_PLUGIN_VERSIONS = {
32
+ [exports.MAVEN_COMPILER_PLUGIN]: '3.16.0',
33
+ [exports.MAVEN_SUREFIRE_PLUGIN]: '3.6.0',
34
+ [exports.MAVEN_FAILSAFE_PLUGIN]: '3.6.0',
35
+ [exports.MAVEN_JAR_PLUGIN]: '3.5.1',
36
+ [exports.MAVEN_ENFORCER_PLUGIN]: '3.6.3',
37
+ [exports.MAVEN_JAVADOC_PLUGIN]: '3.12.0',
38
+ [exports.MAVEN_SOURCE_PLUGIN]: '3.4.0',
39
+ [exports.VERSIONS_MAVEN_PLUGIN]: '2.22.0',
40
+ };
41
+ // Libraries whose current major needs Java 17: JUnit 6, Spring Boot 3+/4,
42
+ // Flyway 10+. The Java 8 line stays on the last major that supports it.
43
+ const MODERN_VERSIONS = {
44
+ ...SHARED_PLUGIN_VERSIONS,
45
+ [exports.JUNIT_BOM]: '6.1.3',
46
+ [exports.SPRING_BOOT_BOM]: '4.1.1',
47
+ [exports.FLYWAY_MAVEN_PLUGIN]: '13.9.0',
48
+ };
49
+ const JAVA_LINES = {
50
+ 1.8: {
51
+ line: '1.8',
52
+ // javac 8 has no --release flag; source/target is the only option.
53
+ compilerProperties: {
54
+ 'maven.compiler.source': '1.8',
55
+ 'maven.compiler.target': '1.8',
56
+ },
57
+ enforcerJavaRange: '[1.8,)',
58
+ setupJavaVersion: '8',
59
+ // Spring Boot 3+ needs Java 17.
60
+ maxSpringBootMajor: 2,
61
+ versions: {
62
+ ...SHARED_PLUGIN_VERSIONS,
63
+ [exports.JUNIT_BOM]: '5.14.4',
64
+ [exports.SPRING_BOOT_BOM]: '2.7.18',
65
+ [exports.FLYWAY_MAVEN_PLUGIN]: '9.22.3',
66
+ },
67
+ },
68
+ ...modernLine('17'),
69
+ ...modernLine('21'),
70
+ ...modernLine('25'),
71
+ };
72
+ function modernLine(line) {
73
+ return {
74
+ [line]: {
75
+ line,
76
+ compilerProperties: { 'maven.compiler.release': line },
77
+ enforcerJavaRange: `[${line},)`,
78
+ setupJavaVersion: line,
79
+ versions: MODERN_VERSIONS,
80
+ },
81
+ };
82
+ }
83
+ const ALIASES = { 8: '1.8' };
84
+ /** The Java lines `javaVersion` accepts, in ascending order. */
85
+ function supportedJavaVersions() {
86
+ // Integer-like keys ('17') enumerate before '1.8', so sort explicitly.
87
+ return Object.keys(JAVA_LINES).sort((a, b) => parseFloat(a) - parseFloat(b));
88
+ }
89
+ /**
90
+ * Resolves a `javaVersion` option to its line profile, applying
91
+ * `versionOverrides` (`groupId/artifactId` -> exact version) on top of the
92
+ * line's defaults. Throws, listing the supported lines, on an unknown line.
93
+ */
94
+ function resolveJavaLine(javaVersion, versionOverrides = {}) {
95
+ const requested = javaVersion ?? exports.DEFAULT_JAVA_VERSION;
96
+ const key = ALIASES[requested] ?? requested;
97
+ const profile = JAVA_LINES[key];
98
+ if (!profile) {
99
+ throw new Error(`Unsupported javaVersion "${requested}". Supported: ${supportedJavaVersions().join(', ')}.`);
100
+ }
101
+ return {
102
+ ...profile,
103
+ versions: { ...profile.versions, ...versionOverrides },
104
+ };
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS12ZXJzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhL2phdmEtdmVyc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsbURBQW1EOzs7QUFtR25ELHNEQUdDO0FBT0QsMENBZ0JDO0FBM0hELCtFQUErRTtBQUNsRSxRQUFBLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDO0FBQ3pFLFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQztBQUN6RSxRQUFBLGdCQUFnQixHQUFHLDJDQUEyQyxDQUFDO0FBQy9ELFFBQUEscUJBQXFCLEdBQUcsZ0RBQWdELENBQUM7QUFDekUsUUFBQSxvQkFBb0IsR0FBRywrQ0FBK0MsQ0FBQztBQUN2RSxRQUFBLG1CQUFtQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3JFLFFBQUEsU0FBUyxHQUFHLHFCQUFxQixDQUFDO0FBQ2xDLFFBQUEsZUFBZSxHQUFHLG1EQUFtRCxDQUFDO0FBQ3RFLFFBQUEsd0JBQXdCLEdBQUcsbURBQW1ELENBQUM7QUFDL0UsUUFBQSxtQkFBbUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUN6RCxRQUFBLHFCQUFxQixHQUFHLHlDQUF5QyxDQUFDO0FBRS9FLCtEQUErRDtBQUNsRCxRQUFBLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUV6QyxrRUFBa0U7QUFDckQsUUFBQSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFFL0MsMEVBQTBFO0FBQzFFLHdEQUF3RDtBQUN4RCxNQUFNLHNCQUFzQixHQUEyQjtJQUNyRCxDQUFDLDZCQUFxQixDQUFDLEVBQUUsUUFBUTtJQUNqQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJQUNoQyxDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJQUNoQyxDQUFDLHdCQUFnQixDQUFDLEVBQUUsT0FBTztJQUMzQixDQUFDLDZCQUFxQixDQUFDLEVBQUUsT0FBTztJQUNoQyxDQUFDLDRCQUFvQixDQUFDLEVBQUUsUUFBUTtJQUNoQyxDQUFDLDJCQUFtQixDQUFDLEVBQUUsT0FBTztJQUM5QixDQUFDLDZCQUFxQixDQUFDLEVBQUUsUUFBUTtDQUNsQyxDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSxNQUFNLGVBQWUsR0FBMkI7SUFDOUMsR0FBRyxzQkFBc0I7SUFDekIsQ0FBQyxpQkFBUyxDQUFDLEVBQUUsT0FBTztJQUNwQixDQUFDLHVCQUFlLENBQUMsRUFBRSxPQUFPO0lBQzFCLENBQUMsMkJBQW1CLENBQUMsRUFBRSxRQUFRO0NBQ2hDLENBQUM7QUFrQkYsTUFBTSxVQUFVLEdBQW9DO0lBQ2xELEdBQUcsRUFBRTtRQUNILElBQUksRUFBRSxLQUFLO1FBQ1gsbUVBQW1FO1FBQ25FLGtCQUFrQixFQUFFO1lBQ2xCLHVCQUF1QixFQUFFLEtBQUs7WUFDOUIsdUJBQXVCLEVBQUUsS0FBSztTQUMvQjtRQUNELGlCQUFpQixFQUFFLFFBQVE7UUFDM0IsZ0JBQWdCLEVBQUUsR0FBRztRQUNyQixnQ0FBZ0M7UUFDaEMsa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixRQUFRLEVBQUU7WUFDUixHQUFHLHNCQUFzQjtZQUN6QixDQUFDLGlCQUFTLENBQUMsRUFBRSxRQUFRO1lBQ3JCLENBQUMsdUJBQWUsQ0FBQyxFQUFFLFFBQVE7WUFDM0IsQ0FBQywyQkFBbUIsQ0FBQyxFQUFFLFFBQVE7U0FDaEM7S0FDRjtJQUNELEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUNuQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDbkIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0NBQ3BCLENBQUM7QUFFRixTQUFTLFVBQVUsQ0FBQyxJQUFZO0lBQzlCLE9BQU87UUFDTCxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ04sSUFBSTtZQUNKLGtCQUFrQixFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1lBQ3RELGlCQUFpQixFQUFFLElBQUksSUFBSSxJQUFJO1lBQy9CLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsUUFBUSxFQUFFLGVBQWU7U0FDMUI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUVyRCxnRUFBZ0U7QUFDaEUsU0FBZ0IscUJBQXFCO0lBQ25DLHVFQUF1RTtJQUN2RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixXQUErQixFQUMvQixtQkFBMkMsRUFBRTtJQUU3QyxNQUFNLFNBQVMsR0FBRyxXQUFXLElBQUksNEJBQW9CLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsU0FBUyxpQkFBaUIscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDNUYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsR0FBRyxPQUFPO1FBQ1YsUUFBUSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUU7S0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFdmVyeSBKYXZhLWxpbmUtZGVwZW5kZW50IHZhbHVlIGEgZ2VuZXJhdGVkIE1hdmVuIGJ1aWxkIHVzZXMgbGl2ZXMgaW4gdGhpc1xuLy8gZmlsZSwgZ3JvdXBlZCBieSBKYXZhIGxpbmUgKEYwMTMgwqc0KS4gTm90aGluZyBlbHNlIGluIGBzcmMvamF2YWAgbWF5XG4vLyBoYXJkLWNvZGUgYSBKYXZhIHZlcnNpb24gb3IgYSBkZWZhdWx0IHBsdWdpbi9CT00gdmVyc2lvbiAtIGFkZGluZyBhIEphdmFcbi8vIGxpbmUgaXMgb25lIG5ldyBlbnRyeSBpbiBKQVZBX0xJTkVTLiBWZXJzaW9ucyBhcmUgZXhhY3QgcGlucywgdmVyaWZpZWRcbi8vIGFnYWluc3QgTWF2ZW4gQ2VudHJhbCAoYW5kLCBmb3IgcGx1Z2lucywgcnVuIG9uIHRoZSBvbGRlc3QgSkRLIG9mIHRoZSBsaW5lXG4vLyB0aGV5IGFyZSBsaXN0ZWQgZm9yKSB3aGVuIHRoZXkgd2VyZSBsYXN0IGJ1bXBlZC5cblxuLyoqIGBncm91cElkL2FydGlmYWN0SWRgIGtleXMgZm9yIHRoZSB2ZXJzaW9ucyB0aGlzIHBhY2thZ2UgcGlucyBieSBkZWZhdWx0LiAqL1xuZXhwb3J0IGNvbnN0IE1BVkVOX0NPTVBJTEVSX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tY29tcGlsZXItcGx1Z2luJztcbmV4cG9ydCBjb25zdCBNQVZFTl9TVVJFRklSRV9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLXN1cmVmaXJlLXBsdWdpbic7XG5leHBvcnQgY29uc3QgTUFWRU5fRkFJTFNBRkVfUExVR0lOID0gJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy9tYXZlbi1mYWlsc2FmZS1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX0pBUl9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLWphci1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX0VORk9SQ0VSX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tZW5mb3JjZXItcGx1Z2luJztcbmV4cG9ydCBjb25zdCBNQVZFTl9KQVZBRE9DX1BMVUdJTiA9ICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMvbWF2ZW4tamF2YWRvYy1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IE1BVkVOX1NPVVJDRV9QTFVHSU4gPSAnb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zL21hdmVuLXNvdXJjZS1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IEpVTklUX0JPTSA9ICdvcmcuanVuaXQvanVuaXQtYm9tJztcbmV4cG9ydCBjb25zdCBTUFJJTkdfQk9PVF9CT00gPSAnb3JnLnNwcmluZ2ZyYW1ld29yay5ib290L3NwcmluZy1ib290LWRlcGVuZGVuY2llcyc7XG5leHBvcnQgY29uc3QgU1BSSU5HX0JPT1RfTUFWRU5fUExVR0lOID0gJ29yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC9zcHJpbmctYm9vdC1tYXZlbi1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IEZMWVdBWV9NQVZFTl9QTFVHSU4gPSAnb3JnLmZseXdheWRiL2ZseXdheS1tYXZlbi1wbHVnaW4nO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05TX01BVkVOX1BMVUdJTiA9ICdvcmcuY29kZWhhdXMubW9qby92ZXJzaW9ucy1tYXZlbi1wbHVnaW4nO1xuXG4vKiogVGhlIEphdmEgbGluZSB1c2VkIHdoZW4gYSBwcm9qZWN0IHNldHMgbm8gYGphdmFWZXJzaW9uYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0pBVkFfVkVSU0lPTiA9ICcyMSc7XG5cbi8qKiBUaGUgbWluaW11bSBNYXZlbiB2ZXJzaW9uIHRoZSBlbmZvcmNlciByZXF1aXJlcyBieSBkZWZhdWx0LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT04gPSAnMy45JztcblxuLy8gTWF2ZW4gcGx1Z2lucyB0aGF0IHJ1biBvbiBldmVyeSBzdXBwb3J0ZWQgSkRLIChhbGwgb2YgdGhlbSByZXF1aXJlIG9ubHlcbi8vIEphdmEgOCBhdCBydW50aW1lKSwgc28gdGhleSBhcmUgc2hhcmVkIGJ5IGV2ZXJ5IGxpbmUuXG5jb25zdCBTSEFSRURfUExVR0lOX1ZFUlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBbTUFWRU5fQ09NUElMRVJfUExVR0lOXTogJzMuMTYuMCcsXG4gIFtNQVZFTl9TVVJFRklSRV9QTFVHSU5dOiAnMy42LjAnLFxuICBbTUFWRU5fRkFJTFNBRkVfUExVR0lOXTogJzMuNi4wJyxcbiAgW01BVkVOX0pBUl9QTFVHSU5dOiAnMy41LjEnLFxuICBbTUFWRU5fRU5GT1JDRVJfUExVR0lOXTogJzMuNi4zJyxcbiAgW01BVkVOX0pBVkFET0NfUExVR0lOXTogJzMuMTIuMCcsXG4gIFtNQVZFTl9TT1VSQ0VfUExVR0lOXTogJzMuNC4wJyxcbiAgW1ZFUlNJT05TX01BVkVOX1BMVUdJTl06ICcyLjIyLjAnLFxufTtcblxuLy8gTGlicmFyaWVzIHdob3NlIGN1cnJlbnQgbWFqb3IgbmVlZHMgSmF2YSAxNzogSlVuaXQgNiwgU3ByaW5nIEJvb3QgMysvNCxcbi8vIEZseXdheSAxMCsuIFRoZSBKYXZhIDggbGluZSBzdGF5cyBvbiB0aGUgbGFzdCBtYWpvciB0aGF0IHN1cHBvcnRzIGl0LlxuY29uc3QgTU9ERVJOX1ZFUlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAuLi5TSEFSRURfUExVR0lOX1ZFUlNJT05TLFxuICBbSlVOSVRfQk9NXTogJzYuMS4zJyxcbiAgW1NQUklOR19CT09UX0JPTV06ICc0LjEuMScsXG4gIFtGTFlXQVlfTUFWRU5fUExVR0lOXTogJzEzLjkuMCcsXG59O1xuXG4vKiogRXZlcnl0aGluZyBhIGdlbmVyYXRlZCBidWlsZCBkZXJpdmVzIGZyb20gaXRzIEphdmEgbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSmF2YUxpbmVQcm9maWxlIHtcbiAgLyoqIENhbm9uaWNhbCBsaW5lIGlkLCBhcyB3cml0dGVuIGluIGBqYXZhVmVyc2lvbmAgKGAxLjhgLCBgMTdgLCAuLi4pLiAqL1xuICByZWFkb25seSBsaW5lOiBzdHJpbmc7XG4gIC8qKiBgPHByb3BlcnRpZXM+YCB0aGF0IHNldCB0aGUgY29tcGlsZXIgbGV2ZWwuICovXG4gIHJlYWRvbmx5IGNvbXBpbGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFRoZSBlbmZvcmNlcidzIGByZXF1aXJlSmF2YVZlcnNpb25gIHJhbmdlLiAqL1xuICByZWFkb25seSBlbmZvcmNlckphdmFSYW5nZTogc3RyaW5nO1xuICAvKiogYGFjdGlvbnMvc2V0dXAtamF2YWAncyBgamF2YS12ZXJzaW9uYCBpbnB1dC4gKi9cbiAgcmVhZG9ubHkgc2V0dXBKYXZhVmVyc2lvbjogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBleGFjdCB2ZXJzaW9ucywga2V5ZWQgYnkgYGdyb3VwSWQvYXJ0aWZhY3RJZGAuICovXG4gIHJlYWRvbmx5IHZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTmV3ZXN0IFNwcmluZyBCb290IG1ham9yIHRoYXQgcnVucyBvbiB0aGlzIGxpbmUsIGlmIGl0IGlzIGNhcHBlZC4gKi9cbiAgcmVhZG9ubHkgbWF4U3ByaW5nQm9vdE1ham9yPzogbnVtYmVyO1xufVxuXG5jb25zdCBKQVZBX0xJTkVTOiBSZWNvcmQ8c3RyaW5nLCBKYXZhTGluZVByb2ZpbGU+ID0ge1xuICAxLjg6IHtcbiAgICBsaW5lOiAnMS44JyxcbiAgICAvLyBqYXZhYyA4IGhhcyBubyAtLXJlbGVhc2UgZmxhZzsgc291cmNlL3RhcmdldCBpcyB0aGUgb25seSBvcHRpb24uXG4gICAgY29tcGlsZXJQcm9wZXJ0aWVzOiB7XG4gICAgICAnbWF2ZW4uY29tcGlsZXIuc291cmNlJzogJzEuOCcsXG4gICAgICAnbWF2ZW4uY29tcGlsZXIudGFyZ2V0JzogJzEuOCcsXG4gICAgfSxcbiAgICBlbmZvcmNlckphdmFSYW5nZTogJ1sxLjgsKScsXG4gICAgc2V0dXBKYXZhVmVyc2lvbjogJzgnLFxuICAgIC8vIFNwcmluZyBCb290IDMrIG5lZWRzIEphdmEgMTcuXG4gICAgbWF4U3ByaW5nQm9vdE1ham9yOiAyLFxuICAgIHZlcnNpb25zOiB7XG4gICAgICAuLi5TSEFSRURfUExVR0lOX1ZFUlNJT05TLFxuICAgICAgW0pVTklUX0JPTV06ICc1LjE0LjQnLFxuICAgICAgW1NQUklOR19CT09UX0JPTV06ICcyLjcuMTgnLFxuICAgICAgW0ZMWVdBWV9NQVZFTl9QTFVHSU5dOiAnOS4yMi4zJyxcbiAgICB9LFxuICB9LFxuICAuLi5tb2Rlcm5MaW5lKCcxNycpLFxuICAuLi5tb2Rlcm5MaW5lKCcyMScpLFxuICAuLi5tb2Rlcm5MaW5lKCcyNScpLFxufTtcblxuZnVuY3Rpb24gbW9kZXJuTGluZShsaW5lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBKYXZhTGluZVByb2ZpbGU+IHtcbiAgcmV0dXJuIHtcbiAgICBbbGluZV06IHtcbiAgICAgIGxpbmUsXG4gICAgICBjb21waWxlclByb3BlcnRpZXM6IHsgJ21hdmVuLmNvbXBpbGVyLnJlbGVhc2UnOiBsaW5lIH0sXG4gICAgICBlbmZvcmNlckphdmFSYW5nZTogYFske2xpbmV9LClgLFxuICAgICAgc2V0dXBKYXZhVmVyc2lvbjogbGluZSxcbiAgICAgIHZlcnNpb25zOiBNT0RFUk5fVkVSU0lPTlMsXG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgQUxJQVNFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgODogJzEuOCcgfTtcblxuLyoqIFRoZSBKYXZhIGxpbmVzIGBqYXZhVmVyc2lvbmAgYWNjZXB0cywgaW4gYXNjZW5kaW5nIG9yZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRlZEphdmFWZXJzaW9ucygpOiBzdHJpbmdbXSB7XG4gIC8vIEludGVnZXItbGlrZSBrZXlzICgnMTcnKSBlbnVtZXJhdGUgYmVmb3JlICcxLjgnLCBzbyBzb3J0IGV4cGxpY2l0bHkuXG4gIHJldHVybiBPYmplY3Qua2V5cyhKQVZBX0xJTkVTKS5zb3J0KChhLCBiKSA9PiBwYXJzZUZsb2F0KGEpIC0gcGFyc2VGbG9hdChiKSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBgamF2YVZlcnNpb25gIG9wdGlvbiB0byBpdHMgbGluZSBwcm9maWxlLCBhcHBseWluZ1xuICogYHZlcnNpb25PdmVycmlkZXNgIChgZ3JvdXBJZC9hcnRpZmFjdElkYCAtPiBleGFjdCB2ZXJzaW9uKSBvbiB0b3Agb2YgdGhlXG4gKiBsaW5lJ3MgZGVmYXVsdHMuIFRocm93cywgbGlzdGluZyB0aGUgc3VwcG9ydGVkIGxpbmVzLCBvbiBhbiB1bmtub3duIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSmF2YUxpbmUoXG4gIGphdmFWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZlcnNpb25PdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbik6IEphdmFMaW5lUHJvZmlsZSB7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IGphdmFWZXJzaW9uID8/IERFRkFVTFRfSkFWQV9WRVJTSU9OO1xuICBjb25zdCBrZXkgPSBBTElBU0VTW3JlcXVlc3RlZF0gPz8gcmVxdWVzdGVkO1xuICBjb25zdCBwcm9maWxlID0gSkFWQV9MSU5FU1trZXldO1xuICBpZiAoIXByb2ZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgamF2YVZlcnNpb24gXCIke3JlcXVlc3RlZH1cIi4gU3VwcG9ydGVkOiAke3N1cHBvcnRlZEphdmFWZXJzaW9ucygpLmpvaW4oJywgJyl9LmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnByb2ZpbGUsXG4gICAgdmVyc2lvbnM6IHsgLi4ucHJvZmlsZS52ZXJzaW9ucywgLi4udmVyc2lvbk92ZXJyaWRlcyB9LFxuICB9O1xufVxuIl19
@@ -0,0 +1,47 @@
1
+ import { Component, Project, java } from 'projen';
2
+ import { MavenPom } from './maven-pom';
3
+ import { MavenModuleOptions } from '../options';
4
+ /**
5
+ * One module of a Maven reactor: a `<dir>/pom.xml` owned by the root
6
+ * project (not a projen subproject - there is still one `.projen/`, one
7
+ * `.gitignore` and one `tasks.json`). Created by `JavaMavenProject.addModule()`.
8
+ *
9
+ * The module pom holds `<parent>`, `artifactId`, `name`, `description` and
10
+ * versionless dependencies/plugins. Any version given to `addDependency`,
11
+ * `addTestDependency` or `addPlugin` is moved into the parent pom's
12
+ * `<dependencyManagement>`/`<pluginManagement>`, so every module that uses
13
+ * an artifact gets the same version.
14
+ */
15
+ export declare class MavenModule extends Component {
16
+ /** Module directory, relative to the repo root. */
17
+ readonly dir: string;
18
+ readonly artifactId: string;
19
+ /** The module's own `pom.xml`. */
20
+ readonly pom: MavenPom;
21
+ private readonly parentPom;
22
+ private readonly groupId;
23
+ constructor(project: Project, parentPom: MavenPom, options: MavenModuleOptions);
24
+ /**
25
+ * Adds a compile-scope dependency. A version, if given, is pinned in the
26
+ * parent's `<dependencyManagement>` and the module entry stays versionless.
27
+ *
28
+ * @param spec `groupId/artifactId[@version]`
29
+ */
30
+ addDependency(spec: string): void;
31
+ /** Adds a `test`-scoped dependency; versions are hoisted like `addDependency`. */
32
+ addTestDependency(spec: string): void;
33
+ /**
34
+ * Adds a build plugin. A version, if given, is pinned in the parent's
35
+ * `<pluginManagement>` and the module entry stays versionless.
36
+ */
37
+ addPlugin(spec: string, options?: java.PluginOptions): void;
38
+ /**
39
+ * Depends on a sibling module. The dependency is versionless here; the
40
+ * parent manages every module at `${project.version}`.
41
+ *
42
+ * @param scope Maven scope (`test`, `provided`, ...)
43
+ * @default - compile scope
44
+ */
45
+ addModuleDependency(module: MavenModule, scope?: string): void;
46
+ private hoistDependency;
47
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MavenModule = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ const maven_pom_1 = require("./maven-pom");
7
+ /**
8
+ * One module of a Maven reactor: a `<dir>/pom.xml` owned by the root
9
+ * project (not a projen subproject - there is still one `.projen/`, one
10
+ * `.gitignore` and one `tasks.json`). Created by `JavaMavenProject.addModule()`.
11
+ *
12
+ * The module pom holds `<parent>`, `artifactId`, `name`, `description` and
13
+ * versionless dependencies/plugins. Any version given to `addDependency`,
14
+ * `addTestDependency` or `addPlugin` is moved into the parent pom's
15
+ * `<dependencyManagement>`/`<pluginManagement>`, so every module that uses
16
+ * an artifact gets the same version.
17
+ */
18
+ class MavenModule extends projen_1.Component {
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenModule", version: "0.0.14" };
20
+ /** Module directory, relative to the repo root. */
21
+ dir;
22
+ artifactId;
23
+ /** The module's own `pom.xml`. */
24
+ pom;
25
+ parentPom;
26
+ groupId;
27
+ constructor(project, parentPom, options) {
28
+ super(project);
29
+ if (!parentPom.groupId || !parentPom.version) {
30
+ throw new Error('A module parent pom needs a groupId and version.');
31
+ }
32
+ this.dir = options.dir;
33
+ this.artifactId = options.artifactId;
34
+ this.parentPom = parentPom;
35
+ this.groupId = parentPom.groupId;
36
+ const depth = options.dir.split('/').length;
37
+ this.pom = new maven_pom_1.MavenPom(project, {
38
+ filePath: `${options.dir}/pom.xml`,
39
+ artifactId: options.artifactId,
40
+ packaging: options.packaging,
41
+ name: options.name ?? options.artifactId,
42
+ description: options.description,
43
+ parent: {
44
+ groupId: parentPom.groupId,
45
+ artifactId: parentPom.artifactId,
46
+ // Maven does not interpolate the <parent> block, so this is the
47
+ // literal parent version, not ${project.version}.
48
+ version: parentPom.version,
49
+ relativePath: `${'../'.repeat(depth)}pom.xml`,
50
+ },
51
+ });
52
+ }
53
+ /**
54
+ * Adds a compile-scope dependency. A version, if given, is pinned in the
55
+ * parent's `<dependencyManagement>` and the module entry stays versionless.
56
+ *
57
+ * @param spec `groupId/artifactId[@version]`
58
+ */
59
+ addDependency(spec) {
60
+ this.pom.addDependency(this.hoistDependency(spec));
61
+ }
62
+ /** Adds a `test`-scoped dependency; versions are hoisted like `addDependency`. */
63
+ addTestDependency(spec) {
64
+ this.pom.addTestDependency(this.hoistDependency(spec));
65
+ }
66
+ /**
67
+ * Adds a build plugin. A version, if given, is pinned in the parent's
68
+ * `<pluginManagement>` and the module entry stays versionless.
69
+ */
70
+ addPlugin(spec, options = {}) {
71
+ const c = (0, maven_pom_1.parseMavenSpec)(spec);
72
+ if (c.version) {
73
+ this.parentPom.addManagedPlugin(spec);
74
+ }
75
+ this.pom.addPlugin(`${c.groupId}/${c.artifactId}`, options);
76
+ }
77
+ /**
78
+ * Depends on a sibling module. The dependency is versionless here; the
79
+ * parent manages every module at `${project.version}`.
80
+ *
81
+ * @param scope Maven scope (`test`, `provided`, ...)
82
+ * @default - compile scope
83
+ */
84
+ addModuleDependency(module, scope) {
85
+ if (module === this) {
86
+ throw new Error(`Module "${this.artifactId}" cannot depend on itself.`);
87
+ }
88
+ this.pom.addDependency(`${this.groupId}/${module.artifactId}`, scope);
89
+ }
90
+ hoistDependency(spec) {
91
+ const c = (0, maven_pom_1.parseMavenSpec)(spec);
92
+ if (c.version) {
93
+ this.parentPom.addManagedDependency(spec);
94
+ }
95
+ return `${c.groupId}/${c.artifactId}`;
96
+ }
97
+ }
98
+ exports.MavenModule = MavenModule;
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4tbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmEvbWF2ZW4vbWF2ZW4tbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FBa0Q7QUFDbEQsMkNBQXVEO0FBR3ZEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLFdBQVksU0FBUSxrQkFBUzs7SUFDeEMsbURBQW1EO0lBQ25DLEdBQUcsQ0FBUztJQUNaLFVBQVUsQ0FBUztJQUNuQyxrQ0FBa0M7SUFDbEIsR0FBRyxDQUFXO0lBRWIsU0FBUyxDQUFXO0lBQ3BCLE9BQU8sQ0FBUztJQUVqQyxZQUFZLE9BQWdCLEVBQUUsU0FBbUIsRUFBRSxPQUEyQjtRQUM1RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBRWpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksb0JBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDL0IsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsVUFBVTtZQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVO1lBQ3hDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUMxQixVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7Z0JBQ2hDLGdFQUFnRTtnQkFDaEUsa0RBQWtEO2dCQUNsRCxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQzFCLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDOUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsSUFBWTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGtGQUFrRjtJQUMzRSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsSUFBWSxFQUFFLFVBQThCLEVBQUU7UUFDN0QsTUFBTSxDQUFDLEdBQUcsSUFBQSwwQkFBYyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CLENBQUMsTUFBbUIsRUFBRSxLQUFjO1FBQzVELElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsVUFBVSw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWTtRQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFBLDBCQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDeEMsQ0FBQzs7QUFyRkgsa0NBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0LCBqYXZhIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE1hdmVuUG9tLCBwYXJzZU1hdmVuU3BlYyB9IGZyb20gJy4vbWF2ZW4tcG9tJztcbmltcG9ydCB7IE1hdmVuTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uL29wdGlvbnMnO1xuXG4vKipcbiAqIE9uZSBtb2R1bGUgb2YgYSBNYXZlbiByZWFjdG9yOiBhIGA8ZGlyPi9wb20ueG1sYCBvd25lZCBieSB0aGUgcm9vdFxuICogcHJvamVjdCAobm90IGEgcHJvamVuIHN1YnByb2plY3QgLSB0aGVyZSBpcyBzdGlsbCBvbmUgYC5wcm9qZW4vYCwgb25lXG4gKiBgLmdpdGlnbm9yZWAgYW5kIG9uZSBgdGFza3MuanNvbmApLiBDcmVhdGVkIGJ5IGBKYXZhTWF2ZW5Qcm9qZWN0LmFkZE1vZHVsZSgpYC5cbiAqXG4gKiBUaGUgbW9kdWxlIHBvbSBob2xkcyBgPHBhcmVudD5gLCBgYXJ0aWZhY3RJZGAsIGBuYW1lYCwgYGRlc2NyaXB0aW9uYCBhbmRcbiAqIHZlcnNpb25sZXNzIGRlcGVuZGVuY2llcy9wbHVnaW5zLiBBbnkgdmVyc2lvbiBnaXZlbiB0byBgYWRkRGVwZW5kZW5jeWAsXG4gKiBgYWRkVGVzdERlcGVuZGVuY3lgIG9yIGBhZGRQbHVnaW5gIGlzIG1vdmVkIGludG8gdGhlIHBhcmVudCBwb20nc1xuICogYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gL2A8cGx1Z2luTWFuYWdlbWVudD5gLCBzbyBldmVyeSBtb2R1bGUgdGhhdCB1c2VzXG4gKiBhbiBhcnRpZmFjdCBnZXRzIHRoZSBzYW1lIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXZlbk1vZHVsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKiBNb2R1bGUgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgcmVwbyByb290LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG4gIC8qKiBUaGUgbW9kdWxlJ3Mgb3duIGBwb20ueG1sYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbTogTWF2ZW5Qb207XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRQb206IE1hdmVuUG9tO1xuICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBwYXJlbnRQb206IE1hdmVuUG9tLCBvcHRpb25zOiBNYXZlbk1vZHVsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICBpZiAoIXBhcmVudFBvbS5ncm91cElkIHx8ICFwYXJlbnRQb20udmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIG1vZHVsZSBwYXJlbnQgcG9tIG5lZWRzIGEgZ3JvdXBJZCBhbmQgdmVyc2lvbi4nKTtcbiAgICB9XG4gICAgdGhpcy5kaXIgPSBvcHRpb25zLmRpcjtcbiAgICB0aGlzLmFydGlmYWN0SWQgPSBvcHRpb25zLmFydGlmYWN0SWQ7XG4gICAgdGhpcy5wYXJlbnRQb20gPSBwYXJlbnRQb207XG4gICAgdGhpcy5ncm91cElkID0gcGFyZW50UG9tLmdyb3VwSWQ7XG5cbiAgICBjb25zdCBkZXB0aCA9IG9wdGlvbnMuZGlyLnNwbGl0KCcvJykubGVuZ3RoO1xuICAgIHRoaXMucG9tID0gbmV3IE1hdmVuUG9tKHByb2plY3QsIHtcbiAgICAgIGZpbGVQYXRoOiBgJHtvcHRpb25zLmRpcn0vcG9tLnhtbGAsXG4gICAgICBhcnRpZmFjdElkOiBvcHRpb25zLmFydGlmYWN0SWQsXG4gICAgICBwYWNrYWdpbmc6IG9wdGlvbnMucGFja2FnaW5nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lID8/IG9wdGlvbnMuYXJ0aWZhY3RJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50OiB7XG4gICAgICAgIGdyb3VwSWQ6IHBhcmVudFBvbS5ncm91cElkLFxuICAgICAgICBhcnRpZmFjdElkOiBwYXJlbnRQb20uYXJ0aWZhY3RJZCxcbiAgICAgICAgLy8gTWF2ZW4gZG9lcyBub3QgaW50ZXJwb2xhdGUgdGhlIDxwYXJlbnQ+IGJsb2NrLCBzbyB0aGlzIGlzIHRoZVxuICAgICAgICAvLyBsaXRlcmFsIHBhcmVudCB2ZXJzaW9uLCBub3QgJHtwcm9qZWN0LnZlcnNpb259LlxuICAgICAgICB2ZXJzaW9uOiBwYXJlbnRQb20udmVyc2lvbixcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBgJHsnLi4vJy5yZXBlYXQoZGVwdGgpfXBvbS54bWxgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcGlsZS1zY29wZSBkZXBlbmRlbmN5LiBBIHZlcnNpb24sIGlmIGdpdmVuLCBpcyBwaW5uZWQgaW4gdGhlXG4gICAqIHBhcmVudCdzIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCBhbmQgdGhlIG1vZHVsZSBlbnRyeSBzdGF5cyB2ZXJzaW9ubGVzcy5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZFtAdmVyc2lvbl1gXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGREZXBlbmRlbmN5KHRoaXMuaG9pc3REZXBlbmRlbmN5KHNwZWMpKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYHRlc3RgLXNjb3BlZCBkZXBlbmRlbmN5OyB2ZXJzaW9ucyBhcmUgaG9pc3RlZCBsaWtlIGBhZGREZXBlbmRlbmN5YC4gKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZFRlc3REZXBlbmRlbmN5KHRoaXMuaG9pc3REZXBlbmRlbmN5KHNwZWMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgYnVpbGQgcGx1Z2luLiBBIHZlcnNpb24sIGlmIGdpdmVuLCBpcyBwaW5uZWQgaW4gdGhlIHBhcmVudCdzXG4gICAqIGA8cGx1Z2luTWFuYWdlbWVudD5gIGFuZCB0aGUgbW9kdWxlIGVudHJ5IHN0YXlzIHZlcnNpb25sZXNzLlxuICAgKi9cbiAgcHVibGljIGFkZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgY29uc3QgYyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmIChjLnZlcnNpb24pIHtcbiAgICAgIHRoaXMucGFyZW50UG9tLmFkZE1hbmFnZWRQbHVnaW4oc3BlYyk7XG4gICAgfVxuICAgIHRoaXMucG9tLmFkZFBsdWdpbihgJHtjLmdyb3VwSWR9LyR7Yy5hcnRpZmFjdElkfWAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGVuZHMgb24gYSBzaWJsaW5nIG1vZHVsZS4gVGhlIGRlcGVuZGVuY3kgaXMgdmVyc2lvbmxlc3MgaGVyZTsgdGhlXG4gICAqIHBhcmVudCBtYW5hZ2VzIGV2ZXJ5IG1vZHVsZSBhdCBgJHtwcm9qZWN0LnZlcnNpb259YC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIE1hdmVuIHNjb3BlIChgdGVzdGAsIGBwcm92aWRlZGAsIC4uLilcbiAgICogQGRlZmF1bHQgLSBjb21waWxlIHNjb3BlXG4gICAqL1xuICBwdWJsaWMgYWRkTW9kdWxlRGVwZW5kZW5jeShtb2R1bGU6IE1hdmVuTW9kdWxlLCBzY29wZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChtb2R1bGUgPT09IHRoaXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFwiJHt0aGlzLmFydGlmYWN0SWR9XCIgY2Fubm90IGRlcGVuZCBvbiBpdHNlbGYuYCk7XG4gICAgfVxuICAgIHRoaXMucG9tLmFkZERlcGVuZGVuY3koYCR7dGhpcy5ncm91cElkfS8ke21vZHVsZS5hcnRpZmFjdElkfWAsIHNjb3BlKTtcbiAgfVxuXG4gIHByaXZhdGUgaG9pc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmIChjLnZlcnNpb24pIHtcbiAgICAgIHRoaXMucGFyZW50UG9tLmFkZE1hbmFnZWREZXBlbmRlbmN5KHNwZWMpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Yy5ncm91cElkfS8ke2MuYXJ0aWZhY3RJZH1gO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,143 @@
1
+ import { Component, Project, java } from 'projen';
2
+ /** Parsed `groupId/artifactId[@version]` spec. */
3
+ export interface MavenCoordinates {
4
+ readonly groupId: string;
5
+ readonly artifactId: string;
6
+ readonly version?: string;
7
+ }
8
+ /**
9
+ * Parses `groupId/artifactId[@version]`. The version, when present, must be
10
+ * one exact version - a range (`[1,2)`), a semver range (`^1`, `~1.2`), or a
11
+ * wildcard throws, because a range resolves differently over time and makes
12
+ * the build non-reproducible.
13
+ */
14
+ export declare function parseMavenSpec(spec: string): MavenCoordinates;
15
+ /** Throws unless `version` is one exact version (no range, no wildcard). */
16
+ export declare function assertExactVersion(version: string, context: string): void;
17
+ /** Options for `MavenPom`. */
18
+ export interface MavenPomOptions {
19
+ /**
20
+ * Path of the pom, relative to the project root.
21
+ * @default "pom.xml"
22
+ */
23
+ readonly filePath?: string;
24
+ /**
25
+ * `groupId`. Omit in a module pom to inherit it from `<parent>`.
26
+ * @default - inherited from the parent
27
+ */
28
+ readonly groupId?: string;
29
+ readonly artifactId: string;
30
+ /**
31
+ * `version`. Omit in a module pom to inherit it from `<parent>`.
32
+ * @default - inherited from the parent
33
+ */
34
+ readonly version?: string;
35
+ /** @default "jar" */
36
+ readonly packaging?: string;
37
+ /** @default - none */
38
+ readonly name?: string;
39
+ /** @default - none */
40
+ readonly description?: string;
41
+ /** @default - none */
42
+ readonly url?: string;
43
+ /** @default - no parent */
44
+ readonly parent?: java.ParentPom;
45
+ }
46
+ /**
47
+ * A `pom.xml` written by this package (rather than projen's `java.Pom`).
48
+ *
49
+ * Supports `<modules>`, `<dependencyManagement>` (including BOM imports),
50
+ * `<pluginManagement>`, and versionless dependencies/plugins - what a Maven
51
+ * reactor needs and `java.Pom` cannot express. Every version it writes is
52
+ * exact; a spec carrying a range throws. Plugin executions render one
53
+ * `<goals>` element per execution (projen's `java.Pom` repeats `<goals>`,
54
+ * which Maven 3.9 rejects as non-parseable).
55
+ *
56
+ * Adding the same `groupId/artifactId` twice merges: a later version
57
+ * replaces an earlier one only if the earlier had none (two different
58
+ * versions throw), and plugin options are merged - `configuration` shallowly,
59
+ * `executions` and `dependencies` appended.
60
+ */
61
+ export declare class MavenPom extends Component {
62
+ /** Path of the pom, relative to the project root. */
63
+ readonly filePath: string;
64
+ readonly groupId?: string;
65
+ readonly artifactId: string;
66
+ readonly version?: string;
67
+ readonly name?: string;
68
+ readonly description?: string;
69
+ readonly url?: string;
70
+ readonly parent?: java.ParentPom;
71
+ /** Maven packaging (`jar`, `pom`, ...). */
72
+ packaging: string;
73
+ /**
74
+ * When true, the versions of `<plugins>` entries are written into
75
+ * `<pluginManagement>` and the `<plugins>` entries stay versionless - the
76
+ * shape a reactor parent wants, so modules can redeclare a plugin without
77
+ * repeating its version.
78
+ */
79
+ managePluginVersions: boolean;
80
+ private readonly properties;
81
+ private readonly modules;
82
+ private readonly boms;
83
+ private readonly managedDeps;
84
+ private readonly deps;
85
+ private readonly managedPlugins;
86
+ private readonly plugins;
87
+ private readonly repositories;
88
+ private readonly pluginRepositories;
89
+ constructor(project: Project, options: MavenPomOptions);
90
+ /** Sets a `<properties>` entry. */
91
+ addProperty(name: string, value: string): void;
92
+ /** Adds a `<module>` (a path relative to this pom's directory). */
93
+ addModule(path: string): void;
94
+ /**
95
+ * Imports a BOM into `<dependencyManagement>` (`type=pom`,
96
+ * `scope=import`). BOMs are written in the order added, before every other
97
+ * managed dependency.
98
+ *
99
+ * @param spec `groupId/artifactId@version` - the version is required
100
+ */
101
+ addBom(spec: string): void;
102
+ /** Removes a BOM import added by `addBom`, if present. */
103
+ removeBom(coordinates: string): void;
104
+ /**
105
+ * Pins a version in `<dependencyManagement>` without adding the
106
+ * dependency itself.
107
+ *
108
+ * @param spec `groupId/artifactId@version` - the version is required
109
+ */
110
+ addManagedDependency(spec: string): void;
111
+ /**
112
+ * Adds a dependency (compile scope unless `scope` is given).
113
+ *
114
+ * @param spec `groupId/artifactId[@version]` - omit the version when a BOM
115
+ * or the parent's `<dependencyManagement>` manages it
116
+ * @param scope Maven scope (`test`, `provided`, `runtime`, ...)
117
+ */
118
+ addDependency(spec: string, scope?: string): void;
119
+ /** Adds a `test`-scoped dependency. */
120
+ addTestDependency(spec: string): void;
121
+ /**
122
+ * Adds a build plugin to `<build><plugins>`.
123
+ *
124
+ * @param spec `groupId/artifactId[@version]` - omit the version when
125
+ * `<pluginManagement>` (here or in the parent) manages it
126
+ */
127
+ addPlugin(spec: string, options?: java.PluginOptions): void;
128
+ /**
129
+ * Adds a plugin to `<build><pluginManagement>` only: it pins the version
130
+ * (and optional default configuration) for this pom and its modules
131
+ * without running the plugin here.
132
+ */
133
+ addManagedPlugin(spec: string, options?: java.PluginOptions): void;
134
+ /** True if a plugin with these `groupId/artifactId` coordinates is in `<plugins>`. */
135
+ hasPlugin(coordinates: string): boolean;
136
+ /** Adds a `<repository>`. */
137
+ addRepository(repository: java.MavenRepository): void;
138
+ /** Adds a `<pluginRepository>`. */
139
+ addPluginRepository(repository: java.MavenRepository): void;
140
+ private mergeDependency;
141
+ private mergePlugin;
142
+ private synthPom;
143
+ }