HHH-13689 Replace uses of the deprecated osgi plugin with the biz.aQute.bnd plugin

https://docs.gradle.org/5.0-milestone-1/release-notes.html#deprecated-osgi-plugin
This commit is contained in:
Yoann Rodière 2019-10-23 10:03:00 +02:00 committed by gbadner
parent b301162660
commit f795213e5a
8 changed files with 167 additions and 106 deletions

View File

@ -17,6 +17,7 @@ buildscript {
classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.7'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'de.thetaphi:forbiddenapis:2.5'
classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:4.2.0'
}
}

View File

@ -26,7 +26,7 @@ apply from: rootProject.file( 'gradle/libraries.gradle' )
apply from: rootProject.file( 'gradle/databases.gradle' )
apply plugin: 'java'
apply plugin: 'osgi'
apply plugin: 'biz.aQute.bnd.builder'
apply plugin: 'checkstyle'
apply plugin: 'build-dashboard'

View File

@ -10,69 +10,90 @@ apply from: rootProject.file( 'gradle/java-module.gradle' )
apply from: rootProject.file( 'gradle/publishing-repos.gradle' )
apply from: rootProject.file( 'gradle/publishing-pom.gradle' )
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Jar
jar {
manifest = osgiManifest {
// GRADLE-1411: Even if we override Imports and Exports
// auto-generation with instructions, classesDir and classpath
// need to be here (temporarily).
if ( project.pluginManager.hasPlugin( 'groovy' ) ) {
classesDir = sourceSets.main.groovy.outputDir
}
else {
classesDir = sourceSets.main.java.outputDir
}
classpath = configurations.runtime
manifest {
attributes(
// Basic JAR manifest attributes
'Specification-Title': project.name,
'Specification-Version': project.version,
'Specification-Vendor': 'Hibernate.org',
'Implementation-Title': project.name,
'Implementation-Version': project.version,
'Implementation-Vendor': 'Hibernate.org',
'Implementation-Vendor-Id': 'org.hibernate',
'Implementation-Url': 'http://hibernate.org/orm',
// Java 9 module name
instruction 'Automatic-Module-Name', project.java9ModuleName
'Automatic-Module-Name': project.java9ModuleName,
// the OSGi metadata
symbolicName project.java9ModuleName
vendor 'Hibernate.org'
description project.description
docURL "http://www.hibernate.org/orm/${project.ormVersion.family}"
// Hibernate-specific JAR manifest attributes
'Hibernate-VersionFamily': project.ormVersion.family,
'Hibernate-JpaVersion': project.jpaVersion.name,
instruction 'Import-Package',
// BND Plugin instructions (for OSGi):
'Bundle-Name': project.name,
'Bundle-SymbolicName': project.java9ModuleName,
'Bundle-Vendor': 'Hibernate.org',
'Bundle-DocURL': "http://www.hibernate.org/orm/${project.ormVersion.family}",
// This is overridden in some sub-projects
'Import-Package': [
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
// use it. Without this, the plugin generates [1.2,2).
'javax.transaction;version="[1.1,2)"',
// Tell Gradle OSGi to still dynamically import the other packages.
// IMPORTANT: Do not include the * in the modules' .gradle files.
// If it exists more than once, the manifest will physically contain a *.
// Also import every package referenced in the code
// (note that '*' is resolved at build time to a list of packages)
'*'
// Basic JAR manifest metadata
instruction 'Specification-Title', project.name
instruction 'Specification-Version', project.version
instruction 'Specification-Vendor', 'Hibernate.org'
instruction 'Implementation-Title', project.name
instruction 'Implementation-Version', project.version
instruction 'Implementation-Vendor', 'Hibernate.org'
instruction 'Implementation-Vendor-Id', 'org.hibernate'
instruction 'Implementation-Url', 'http://hibernate.org/orm'
instruction 'Hibernate-VersionFamily', project.ormVersion.family
instruction 'Hibernate-JpaVersion', project.jpaVersion.name
].join( ',' ),
'-exportcontents': "*;version=${project.version}"
)
}
}
task sourcesJar(type: Jar) {
from project.sourceSets.main.allSource
manifest = project.tasks.jar.manifest
manifest {
attributes(
// Basic JAR manifest attributes
'Specification-Title': project.name,
'Specification-Version': project.version,
'Specification-Vendor': 'Hibernate.org',
'Implementation-Title': project.name,
'Implementation-Version': project.version,
'Implementation-Vendor': 'Hibernate.org',
'Implementation-Vendor-Id': 'org.hibernate',
'Implementation-Url': 'http://hibernate.org/orm',
// Hibernate-specific JAR manifest attributes
'Hibernate-VersionFamily': project.ormVersion.family,
'Hibernate-JpaVersion': project.jpaVersion.name
)
}
archiveClassifier.set( 'sources' )
}
task javadocJar(type: Jar) {
from project.tasks.javadoc.outputs
manifest = project.tasks.jar.manifest
manifest {
attributes(
// Basic JAR manifest attributes
'Specification-Title': project.name,
'Specification-Version': project.version,
'Specification-Vendor': 'Hibernate.org',
'Implementation-Title': project.name,
'Implementation-Version': project.version,
'Implementation-Vendor': 'Hibernate.org',
'Implementation-Vendor-Id': 'org.hibernate',
'Implementation-Url': 'http://hibernate.org/orm',
// Hibernate-specific JAR manifest attributes
'Hibernate-VersionFamily': project.ormVersion.family,
'Hibernate-JpaVersion': project.jpaVersion.name
)
}
archiveClassifier.set( 'javadoc' )
}

View File

@ -103,17 +103,24 @@ dependencies {
jar {
manifest {
mainAttributes( 'Main-Class': 'org.hibernate.Version' )
attributes(
'Main-Class': 'org.hibernate.Version',
instructionFirst 'Import-Package',
// BND Plugin instructions (for OSGi):
'Import-Package': [
'javax.security.auth;resolution:=optional',
'javax.security.jacc;resolution:=optional',
'javax.validation;resolution:=optional',
'javax.validation.constraints;resolution:=optional',
'javax.validation.groups;resolution:=optional',
'javax.validation.metadata;resolution:=optional',
// TODO: Shouldn't have to explicitly list this, but the plugin
// generates it with a [1.0,2) version.
// Make javax.security.jacc optional and do not reference a version range (because that's what we used to do)
'javax.security.jacc;resolution:=optional;version=!',
// Make javax.validation optional and do not reference a version range (because that's what we used to do)
'javax.validation;resolution:=optional;version=!',
'javax.validation.constraints;resolution:=optional;version=!',
'javax.validation.groups;resolution:=optional;version=!',
'javax.validation.metadata;resolution:=optional;version=!',
// Make javax.enterprise optional and do not reference a version range (because that's what we used to do)
'!javax.enterprise*',
'javax.enterprise.context.spi;resolution:=optional;version=!',
'javax.enterprise.inject.spi;resolution:=optional;version=!',
// For JPA, we don't want to target the automatically generated range, but a specific version
"javax.persistence;version=\"${project.jpaVersion.osgiName}\"",
// optionals
'javax.management;resolution:=optional',
@ -122,20 +129,28 @@ jar {
'org.apache.tools.ant;resolution:=optional',
'org.apache.tools.ant.taskdefs;resolution:=optional',
'org.apache.tools.ant.types;resolution:=optional',
'!javax.enterprise*',
'javax.enterprise.context.spi;resolution:=optional',
'javax.enterprise.inject.spi;resolution:=optional',
'javax.inject;resolution:=optional',
'net.bytebuddy.*;resolution:=optional',
'org.objectweb.jonas_tm;resolution:=optional',
'com.ibm.websphere.jtaextensions;resolution:=optional',
// We must specify the version explicitly to allow Karaf
// to use an older version of JAXB (the only one we can use in Karaf)
"javax.xml.bind.*;version=\"${project.jaxbApiVersionOsgiRange}\""
// // TODO: Uncomment once EntityManagerFactoryBuilderImpl no longer
// // uses ClassLoaderServiceImpl.
// instruction 'Export-Package',
// 'org.hibernate.boot.registry.classloading.internal',
// '*'
"javax.xml.bind.*;version=\"${project.jaxbApiVersionOsgiRange}\"",
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
// use it. Without this, the plugin generates [1.2,2).
'javax.transaction;version="[1.1,2)"',
// Also import every package referenced in the code
'*'
].join( ',' ),
'-exportcontents': [
// Legacy resource packages containing XSDs that were traditionally not exported
"!org.hibernate.xsd.cfg",
"!org.hibernate.xsd.mapping",
// TODO: Uncomment once EntityManagerFactoryBuilderImpl no longer uses ClassLoaderServiceImpl.
//'org.hibernate.boot.registry.classloading.internal',
"*;version=${project.version}"
].join( ',' ),
)
}
}

View File

@ -12,19 +12,21 @@ dependencies {
compile( libraries.jta )
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// The OSGi JAR manifest support does not like a non-existent classes dir,
// so make sure we dont use the OSGi one :)
// Traditionally we used to not include any manifest attributes in this JAR
// except "Manifest-Version"
// Since it's a legacy JAR, let's continue that way until it's retired.
jar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
// Prevent BND from adding manifest attributes automatically
bnd( '-nobundles': 'true' )
}
sourcesJar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
}
javadocJar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
}

View File

@ -40,7 +40,9 @@ sourceSets {
jar {
manifest {
instructionFirst 'Import-Package',
attributes(
// BND Plugin instructions (for OSGi):
'Import-Package': [
// TODO: Shouldn't have to explicitly list the JPA packages, but
// the plugin generates them with [1.0,2) versions.
"javax.persistence;version=\"${project.jpaVersion.osgiName}\"",
@ -49,7 +51,14 @@ jar {
"javax.persistence.spi;version=\"${project.jpaVersion.osgiName}\"",
// optionals
'javax.naming;resolution:=optional',
'org.apache.tools.ant;resolution:=optional'
'org.apache.tools.ant;resolution:=optional',
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
// use it. Without this, the plugin generates [1.2,2).
'javax.transaction;version="[1.1,2)"',
// Also import every package referenced in the code
'*'
].join( ',' )
)
}
}

View File

@ -6,18 +6,22 @@ description = '(deprecated - use hibernate-core instead) Support for Java8-speci
dependencies {
compile( project( ':hibernate-core' ) )
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// The OSGi JAR manifest support does not like a non-existent classes dir,
// so make sure we dont use the OSGi one :)
// Traditionally we used to not include any manifest attributes in this JAR
// except "Manifest-Version"
// Since it's a legacy JAR, let's continue that way until it's retired.
jar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
// Prevent BND from adding manifest attributes automatically
bnd( '-nobundles': 'true' )
}
sourcesJar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
}
javadocJar {
manifest = null
manifest.attributes.removeAll { key, value -> key != "Manifest-Version" }
}

View File

@ -102,13 +102,22 @@ dependencies {
jar {
manifest {
instruction 'Bundle-Activator', 'org.hibernate.osgi.HibernateBundleActivator'
instruction 'Provide-Capability', 'osgi.service;effective:=active;objectClass=javax.persistence.spi.PersistenceProvider'
instructionFirst 'Import-Package',
attributes(
// BND Plugin instructions (for OSGi):
'Bundle-Activator': 'org.hibernate.osgi.HibernateBundleActivator',
'Provide-Capability': 'osgi.service;effective:=active;objectClass=javax.persistence.spi.PersistenceProvider',
'Import-Package': [
// TODO: Shouldn't have to explicitly list this, but the plugin
// generates it with a [1.0,2) version.
"javax.persistence;version=\"${project.jpaVersion.osgiName}\"",
"javax.persistence.spi;version=\"${project.jpaVersion.osgiName}\""
"javax.persistence.spi;version=\"${project.jpaVersion.osgiName}\"",
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
// use it. Without this, the plugin generates [1.2,2).
'javax.transaction;version="[1.1,2)"',
// Also import every package referenced in the code
'*'
].join( ',' )
)
}
}