Skip to content

Commit bc355d6

Browse files
committed
feat: add otel.shadow-conventions plugin to centralize dist packaging and license handling
# Summary A new in-repo convention plugin `otel.shadow-conventions` was added to centralize creation of runtime distribution jars and legal/SBOM handling. The plugin applies and configures Shadow (fat-jar), CycloneDX (SBOM), and the dependency-license-report plugin, and wires generated outputs into the distribution packaging in a lazy, incremental-friendly way. # What changed A new convention file was added under `buildSrc/src/main/kotlin/otel.shadow-conventions.gradle.kts` which: - applies the `com.gradleup.shadow`, `org.cyclonedx.bom`, and `com.github.jk1.dependency-license-report` plugins; - centralizes `licenseReport` configuration and points it at the repo `config/dependency-license/*` policy files; - configures CycloneDX to emit JSON-only SBOM and registers the BOM as a lazy input for packaging; - adds a provider-based `copyLegalDocs` task that copies generated `THIRD-PARTY-NOTICES.txt` and the CycloneDX BOM into `build/generated/legal-docs` and renames the BOM to `SBOM.json`; - configures `shadowJar` to set classifier `dist`, exclude dependency-provided `LICENSE`/`NOTICE` files, depend on the license and SBOM generator tasks, and include only the curated legal artifacts and project `LICENSE` into `META-INF` in the distribution jar. `buildSrc/build.gradle.kts` was updated to include implementation dependencies for the Shadow, dependency-license-report, and CycloneDX Gradle plugins so the new convention plugin compiles. The `cel-sampler` module now applies `otel.shadow-conventions` and its README was updated to recommend depending on the runtime distribution artifact (artifact with `-dist` classifier) for extension usage. Two configuration files were added under `config/dependency-license/`: - `allowed-licenses.json` — an allowlist of acceptable licenses used by the license report check - `license-normalizer-bundle.json` — rules to normalize license names across inputs # Rationale Centralizing dist packaging and license handling in a convention plugin provides a consistent workflow across modules: the normal library JAR remains clean for library consumers, while the self-contained distribution jar (classifier `dist`) bundles dependencies, SBOM, and curated legal materials for runtime use. The plugin uses Gradle Providers and `dependsOn` wiring so generated outputs are included without eager file resolution, supporting up-to-date checks and configuration-cache friendliness. Dependency-provided `LICENSE`/`NOTICE` files are excluded from the fat jar to avoid duplicates and conflicts; the plugin includes only the authorized/generated artifacts.
1 parent af3f871 commit bc355d6

File tree

7 files changed

+248
-1
lines changed

7 files changed

+248
-1
lines changed

buildSrc/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ dependencies {
2020
implementation("com.gradle.develocity:com.gradle.develocity.gradle.plugin:4.2.2")
2121
implementation("me.champeau.gradle.japicmp:me.champeau.gradle.japicmp.gradle.plugin:0.4.6")
2222
implementation("com.google.auto.value:auto-value-annotations:1.11.1")
23+
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.2.2")
24+
implementation("com.github.jk1.dependency-license-report:com.github.jk1.dependency-license-report.gradle.plugin:3.0.1")
25+
implementation("org.cyclonedx.bom:org.cyclonedx.bom.gradle.plugin:3.1.0")
2326
}
2427

2528
spotless {

buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ java {
3131
withSourcesJar()
3232
}
3333

34+
tasks.named<Jar>("jar") {
35+
from(rootProject.file("LICENSE")) {
36+
into("META-INF")
37+
}
38+
}
39+
3440
tasks {
3541
withType<JavaCompile>().configureEach {
3642
with(options) {
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
import com.github.jk1.license.filter.LicenseBundleNormalizer
3+
import com.github.jk1.license.render.ReportRenderer
4+
import com.github.jk1.license.render.TextReportRenderer
5+
import com.github.jk1.license.task.CheckLicensePreparationTask
6+
import com.github.jk1.license.task.CheckLicenseTask
7+
import com.github.jk1.license.task.ReportTask
8+
9+
plugins {
10+
id("com.gradleup.shadow")
11+
id("org.cyclonedx.bom")
12+
id("com.github.jk1.dependency-license-report")
13+
}
14+
15+
// Temporary workaround until the license plugin supports configuration cache
16+
tasks.withType<ReportTask>().configureEach {
17+
notCompatibleWithConfigurationCache("Unsupported")
18+
}
19+
tasks.withType<CheckLicensePreparationTask>().configureEach {
20+
notCompatibleWithConfigurationCache("Unsupported")
21+
}
22+
tasks.withType<CheckLicenseTask>().configureEach {
23+
notCompatibleWithConfigurationCache("Unsupported")
24+
}
25+
26+
licenseReport {
27+
allowedLicensesFile = file(rootProject.file("config/dependency-license/allowed-licenses.json"))
28+
excludes = arrayOf("opentelemetry-java-contrib:dependencyManagement")
29+
filters = arrayOf(
30+
LicenseBundleNormalizer(
31+
rootProject.file("config/dependency-license/license-normalizer-bundle.json").absolutePath,
32+
false
33+
)
34+
)
35+
renderers = arrayOf<ReportRenderer>(
36+
TextReportRenderer()
37+
)
38+
}
39+
40+
tasks.cyclonedxDirectBom {
41+
xmlOutput.unsetConvention()
42+
}
43+
44+
val copyLegalDocs = tasks.register<Copy>("copyLegalDocs") {
45+
group = "documentation"
46+
description = "Copies legal files and generated checkLicense/SBOM reports into resources."
47+
48+
from(layout.buildDirectory.file("reports/dependency-license/THIRD-PARTY-NOTICES.txt"))
49+
from(layout.buildDirectory.file("reports/cyclonedx-direct/bom.json"))
50+
51+
into(layout.buildDirectory.dir("generated/legal-docs"))
52+
53+
rename("bom.json", "SBOM.json")
54+
}
55+
56+
copyLegalDocs.configure {
57+
tasks.findByName("cyclonedxDirectBom")?.let { dependsOn(it) }
58+
tasks.findByName("checkLicense")?.let { dependsOn(it) }
59+
}
60+
61+
tasks.named<ShadowJar>("shadowJar") {
62+
dependsOn(copyLegalDocs)
63+
64+
transform<com.github.jengelman.gradle.plugins.shadow.transformers.ApacheNoticeResourceTransformer>()
65+
66+
manifest {
67+
attributes["Implementation-Version"] = project.version
68+
}
69+
70+
// Prevent dependency-provided LICENSE/NOTICE files from being copied into the
71+
// distribution (they often duplicate or conflict). We still include the
72+
// project"s own `LICENSE` explicitly below.
73+
exclude(
74+
"DISCLAIMER",
75+
"license.header",
76+
"licenses/**",
77+
"META-INF/DEPENDENCIES",
78+
"META-INF/NOTICE.md",
79+
"META-INF/NOTICE",
80+
"META-INF/NOTICE.md",
81+
"META-INF/licenses/**",
82+
"META-INF/LICENSE*",
83+
"**/NOTICE*"
84+
)
85+
86+
from(layout.buildDirectory.dir("generated/legal-docs")) {
87+
into("META-INF/licenses")
88+
}
89+
90+
from(rootProject.file("LICENSE")) {
91+
into("META-INF")
92+
}
93+
}
94+
95+
tasks.named<Task>("assemble") {
96+
dependsOn("shadowJar")
97+
}

cel-sampler/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The `CelBasedSampler` supports [declarative configuration](https://opentelemetry
66

77
To use:
88

9-
* Add a dependency on `io.opentelemetry.contrib:opentelemetry-cel-sampler:<version>`
9+
* Add a dependency on `io.opentelemetry.contrib:opentelemetry-cel-sampler-dist:<version>`
1010
* See the [extension documentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/examples/extension/README.md#build-and-add-extensions) for how to add extensions when using the java agent.
1111
* Follow the [instructions](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/incubator/README.md#declarative-configuration) to configure OpenTelemetry with declarative configuration.
1212
* Configure the `.tracer_provider.sampler` to include the `cel_based` sampler.

cel-sampler/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
13
plugins {
24
id("otel.java-conventions")
5+
id("otel.shadow-conventions")
36
id("otel.publish-conventions")
47
}
58

@@ -18,3 +21,7 @@ dependencies {
1821
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
1922
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
2023
}
24+
25+
tasks.named<ShadowJar>("shadowJar") {
26+
archiveClassifier.set("dist")
27+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"allowedLicenses": [
3+
{
4+
"moduleLicense": "Apache License, Version 2.0"
5+
},
6+
{
7+
"moduleLicense": "Bouncy Castle Licence"
8+
},
9+
{
10+
"moduleLicense": "The 3-Clause BSD License"
11+
},
12+
{
13+
"moduleLicense": "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0"
14+
},
15+
{
16+
"moduleLicense": "GNU LESSER GENERAL PUBLIC LICENSE, Version 3"
17+
},
18+
{
19+
"moduleLicense": "GNU Lesser General Public License Version 3 or greater"
20+
},
21+
{
22+
"moduleLicense": "Go License"
23+
},
24+
{
25+
"moduleLicense": "MIT License"
26+
},
27+
{
28+
"moduleLicense": "PUBLIC DOMAIN"
29+
},
30+
{
31+
"moduleVersion": "1.0",
32+
"moduleName": "net.jcip:jcip-annotations"
33+
},
34+
{
35+
"moduleName": "opentelemetry-java-contrib:dependencyManagement"
36+
}
37+
]
38+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
{
2+
"bundles" : [
3+
{ "bundleName" : "Apache-1.1", "licenseName" : "Apache Software License, Version 1.1", "licenseUrl" : "https://www.apache.org/licenses/LICENSE-1.1" },
4+
{ "bundleName" : "Apache-2.0", "licenseName" : "Apache License, Version 2.0", "licenseUrl" : "https://www.apache.org/licenses/LICENSE-2.0" },
5+
{ "bundleName" : "0BSD", "licenseName" : "BSD Zero Clause License", "licenseUrl" : "https://opensource.org/licenses/0BSD" },
6+
{ "bundleName" : "BSD-2-Clause", "licenseName" : "The 2-Clause BSD License", "licenseUrl" : "https://opensource.org/licenses/BSD-2-Clause" },
7+
{ "bundleName" : "BSD-3-Clause", "licenseName" : "The 3-Clause BSD License", "licenseUrl" : "https://opensource.org/licenses/BSD-3-Clause" },
8+
{ "bundleName" : "CC0-1.0", "licenseName" : "Creative Commons Legal Code", "licenseUrl" : "https://creativecommons.org/publicdomain/zero/1.0/legalcode" },
9+
{ "bundleName" : "CC-BY-2.5", "licenseName": "Creative Commons Attribution Non Commercial 2.5 Generic", "licenseUrl": "https://creativecommons.org/licenses/by/2.5" },
10+
{ "bundleName" : "CDDL-1.0", "licenseName" : "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0", "licenseUrl" : "https://oss.oracle.com/licenses/CDDL" },
11+
{ "bundleName" : "CDDL-1.1", "licenseName" : "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1", "licenseUrl" : "https://oss.oracle.com/licenses/CDDL-1.1" },
12+
{ "bundleName" : "CPL-1.0", "licenseName" : "Common Public License - v 1.0", "licenseUrl" : "https://www.eclipse.org/legal/cpl-v10.html" },
13+
{ "bundleName" : "EPL-1.0", "licenseName" : "Eclipse Public License - v 1.0", "licenseUrl" : "http://www.eclipse.org/legal/epl-v10.html" },
14+
{ "bundleName" : "EPL-2.0", "licenseName" : "Eclipse Public License - v 2.0", "licenseUrl" : "https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt" },
15+
{ "bundleName" : "EDL-1.0", "licenseName" : "Eclipse Distribution License - v 1.0", "licenseUrl" : "https://www.eclipse.org/org/documents/edl-v10.html" },
16+
{ "bundleName" : "Go", "licenseName" : "Go License", "licenseUrl": "https://golang.org/LICENSE" },
17+
{ "bundleName" : "GPL-1.0", "licenseName" : "GNU GENERAL PUBLIC LICENSE, Version 1", "licenseUrl" : "https://www.gnu.org/licenses/gpl-1.0" },
18+
{ "bundleName" : "GPL-2.0-only", "licenseName" : "GNU GENERAL PUBLIC LICENSE, Version 2", "licenseUrl" : "https://www.gnu.org/licenses/gpl-2.0" },
19+
{ "bundleName" : "GPL-3.0-only", "licenseName" : "GNU GENERAL PUBLIC LICENSE, Version 3", "licenseUrl" : "https://www.gnu.org/licenses/gpl-3.0" },
20+
{ "bundleName" : "GPL-2.0 WITH Classpath-exception-2.0", "licenseName" : "GNU GENERAL PUBLIC LICENSE, Version 2 + Classpath Exception", "licenseUrl" : "https://openjdk.java.net/legal/gplv2+ce.html" },
21+
{ "bundleName" : "LGPL-2.1-only", "licenseName" : "GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1", "licenseUrl" : "https://www.gnu.org/licenses/lgpl-2.1" },
22+
{ "bundleName" : "LGPL-3.0-only", "licenseName" : "GNU LESSER GENERAL PUBLIC LICENSE, Version 3", "licenseUrl" : "https://www.gnu.org/licenses/lgpl-3.0" },
23+
{ "bundleName" : "LGPL-3.0-or-greater", "licenseName" : "GNU Lesser General Public License Version 3 or greater", "licenseUrl": "http://www.gnu.org/licenses/lgpl.html" },
24+
{ "bundleName" : "MIT", "licenseName" : "MIT License", "licenseUrl" : "https://opensource.org/licenses/MIT" },
25+
{ "bundleName" : "MPL-1.1", "licenseName" : "Mozilla Public License Version 1.1", "licenseUrl" : "https://www.mozilla.org/en-US/MPL/1.1" },
26+
{ "bundleName" : "MPL-2.0", "licenseName" : "Mozilla Public License, Version 2.0", "licenseUrl" : "https://www.mozilla.org/en-US/MPL/2.0" },
27+
{ "bundleName" : "Public-Domain", "licenseName" : "PUBLIC DOMAIN", "licenseUrl" : "" }
28+
],
29+
"transformationRules" : [
30+
{ "bundleName" : "0BSD", "licenseNamePattern" : "BSD Zero Clause License" },
31+
{ "bundleName" : "0BSD", "licenseNamePattern" : "BSD$" },
32+
{ "bundleName" : "0BSD", "licenseNamePattern" : "BSD( |-)clause.*" },
33+
{ "bundleName" : "0BSD", "licenseNamePattern" : "BSD( |-)license.*" },
34+
{ "bundleName" : "Apache-2.0", "licenseNamePattern" : ".*The Apache Software License, Version 2\\.0.*" },
35+
{ "bundleName" : "Apache-2.0", "licenseNamePattern" : ".*?Apache( |-|_)2.*" },
36+
{ "bundleName" : "Apache-2.0", "licenseNamePattern" : "ASL 2\\.0" },
37+
{ "bundleName" : "Apache-2.0", "licenseNamePattern" : ".*Apache License,?( Version)? 2.*" },
38+
{ "bundleName" : "Apache-2.0", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/Apache-2\\.0.*" },
39+
{ "bundleName" : "Apache-2.0", "licenseUrlPattern" : ".*www\\.apache\\.org/licenses/LICENSE-2\\.0.*" },
40+
{ "bundleName" : "Apache-2.0", "modulePattern": "opentelemetry-java-contrib:dependencyManagement" },
41+
{ "bundleName" : "LGPL-2.1-only", "licenseUrlPattern" : ".*www\\.gnu\\.org/licenses/old-licenses/lgpl-2\\.1\\.html" },
42+
{ "bundleName" : "Apache-2.0", "licenseFileContentPattern" : ".*Apache License,?( Version)? 2.*" },
43+
{ "bundleName" : "Apache-1.1", "licenseFileContentPattern" : ".*Apache Software License, Version 1\\.1.*" },
44+
{ "bundleName" : "CC0-1.0", "licenseNamePattern" : "CC0(( |-)1(\\.0)?)?" },
45+
{ "bundleName" : "CC0-1.0", "licenseUrlPattern" : ".*(www\\.)?creativecommons\\.org/publicdomain/zero/1\\.0/" },
46+
{ "bundleName" : "CDDL-1.0", "licenseFileContentPattern" : ".*CDDL.*1\\.0" },
47+
{ "bundleName" : "CDDL-1.0", "licenseUrlPattern" : ".*CDDL.*.?1\\.0" },
48+
{ "bundleName" : "CDDL-1.1", "licenseUrlPattern" : ".*CDDL.*.?1\\.1" },
49+
{ "bundleName" : "CDDL-1.0", "licenseNamePattern" : "Common Development and Distribution License( \\(CDDL\\),?)? (version )?(.?\\s?)?1\\.0" },
50+
{ "bundleName" : "CDDL-1.1", "licenseNamePattern" : "Common Development and Distribution License( \\(CDDL\\),?)? (version )?(.?\\s?)?1\\.1" },
51+
{ "bundleName" : "BSD-3-Clause", "licenseNamePattern" : ".*BSD( |-)3-clause.*" },
52+
{ "bundleName" : "BSD-3-Clause", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/BSD-3-Clause" },
53+
{ "bundleName" : "BSD-3-Clause", "licenseNamePattern" : ".*?(The )New BSD License.*" },
54+
{ "bundleName" : "BSD-3-Clause", "licenseNamePattern" : ".*?Modified BSD License.*" },
55+
{ "bundleName" : "BSD-2-Clause", "licenseNamePattern" : "BSD( |-)2-clause.*" },
56+
{ "bundleName" : "BSD-2-Clause", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/BSD-2-Clause" },
57+
{ "bundleName" : "BSD-2-Clause", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/bsd-license(\\.php)?" },
58+
{ "bundleName" : "CDDL-1.0", "licenseNamePattern" : "Common Development and Distribution( License)?" },
59+
{ "bundleName" : "CDDL-1.0", "licenseNamePattern" : "CDDL 1(\\.0)" },
60+
{ "bundleName" : "CDDL-1.1", "licenseNamePattern" : "CDDL 1\\.1" },
61+
{ "bundleName" : "CDDL-1.1", "licenseUrlPattern" : ".*(www\\.).opensource\\.org/licenses/CDDL-1\\.0" },
62+
{ "bundleName" : "EPL-1.0", "licenseNamePattern" : "Eclipse Publish License.*(v|version)\\.?\\s?1(\\.?0)?" },
63+
{ "bundleName" : "EPL-1.0", "licenseNamePattern" : "Eclipse Public License.*(v|version)\\.?\\s?1(\\.?0)?" },
64+
{ "bundleName" : "EPL-2.0", "licenseNamePattern" : "Eclipse Public License.*(v|version)\\.?\\s?2(\\.?0)?" },
65+
{ "bundleName" : "EPL-2.0", "licenseUrlPattern" : ".*(www\\.).opensource\\.org/licenses/EPL-2\\.0" },
66+
{ "bundleName" : "EPL-2.0", "licenseUrlPattern" : ".*http.?://www\\.eclipse\\.org/legal/epl-.?2\\.?0.*" },
67+
{ "bundleName" : "EPL-2.0", "licenseUrlPattern" : ".*http.?://www\\.eclipse\\.org/org.*/epl-.?2\\.?0.*" },
68+
{ "bundleName" : "EPL-2.0", "licenseUrlPattern" : ".*http.?://projects\\.eclipse\\.org/.*/epl-.?2\\.?0.*" },
69+
{ "bundleName" : "EDL-1.0", "licenseNamePattern" : "Eclipse Distribution License.*(v|version)\\.?\\s?1(\\.0)?" },
70+
{ "bundleName" : "EDL-1.0", "licenseUrlPattern" : ".*http.?://(www\\.)?eclipse\\.org/org.*/edl-.?1\\.?0.*" },
71+
{ "bundleName" : "Go", "licenseUrlPattern" : "https?://golang.org/LICENSE" },
72+
{ "bundleName" : "GPL-2.0-only", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/GPL-2\\.0" },
73+
{ "bundleName" : "GPL-2.0 WITH Classpath-exception-2.0", "licenseNamePattern" : "GNU General Public License, version 2.*classpath exception" },
74+
{ "bundleName" : "GPL-2.0 WITH Classpath-exception-2.0", "licenseNamePattern" : "GNU General Public License, version 2.*cp?e" },
75+
{ "bundleName" : "GPL-2.0 WITH Classpath-exception-2.0", "licenseNamePattern" : "GNU General Public License, version 2.*, with the classpath exception" },
76+
{ "bundleName" : "GPL-2.0 WITH Classpath-exception-2.0", "licenseNamePattern" : "GPL2 w/ CPE" },
77+
{ "bundleName" : "GPL-3.0-only", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/GPL-3\\.0" },
78+
{ "bundleName" : "LGPL-2.1-only", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/LGPL-2\\.1" },
79+
{ "bundleName" : "LGPL-2.1-only", "licenseUrlPattern" : ".*(www\\.)?gnu\\.org/licenses(/old-licenses)?/lgpl-2\\.1(\\.(html|txt))?" },
80+
{ "bundleName" : "LGPL-2.1-only", "licenseNamePattern" : "LGPL 2\\.1" },
81+
{ "bundleName" : "LGPL-2.1-only", "licenseNamePattern" : "LGPL.*(v|version)\\.?\\s?2\\.1" },
82+
{ "bundleName" : "LGPL-2.1-only", "licenseUrlPattern" : ".*(www\\.)?repository.jboss.org/licenses/lgpl-2.1\\.txt" },
83+
{ "bundleName" : "LGPL-3.0-only", "licenseUrlPattern" : ".*(www\\.).opensource\\.org/licenses/LGPL-3\\.0" },
84+
{ "bundleName" : "LGPL-3.0-only", "licenseNamePattern" : "lgplv?3" },
85+
{ "bundleName" : "LGPL-3.0-only", "licenseUrlPattern" : ".*(www\\.)?gnu\\.org/licenses(/old-licenses)?/lgpl(-3)?(\\.(html|txt))?" },
86+
{ "bundleName" : "MIT", "licenseNamePattern" : "Bouncy Castle Licence" },
87+
{ "bundleName" : "MIT", "licenseNamePattern" : "(The\\s)?MIT(\\slicen(c|s)e)?(\\s\\(MIT\\))?" },
88+
{ "bundleName" : "MIT", "licenseUrlPattern" : ".*(www\\.)?opensource\\.org/licenses/MIT(\\.php)?" },
89+
{ "bundleName" : "MPL-1.1", "licenseNamePattern" : "MPL 1\\.1" },
90+
{ "bundleName" : "MPL-2.0", "licenseUrlPattern" : ".*(www\\.).opensource\\.org/licenses/MPL-2\\.0" },
91+
{ "bundleName" : "Public-Domain", "licenseNamePattern" : "((public)\\s(domain)).*", "transformUrl" : false },
92+
{ "bundleName" : "Public-Domain", "licenseFileContentPattern" : ".*(Creative)\\s(Commons).*", "transformUrl" : false },
93+
{ "bundleName" : "Public-Domain", "licenseFileContentPattern" : ".*((Public)\\s(Domain)).*", "transformUrl" : false },
94+
{ "bundleName" : "CC-BY-2.5", "modulePattern": "net.jcip:jcip-annotations:1\\.0" }
95+
]
96+
}

0 commit comments

Comments
 (0)