File glassfish-hk2.spec of Package glassfish-hk2

#
# spec file for package glassfish-hk2
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global extra_version 1.0.3
%bcond_without jp_minimal
Name:           glassfish-hk2
Version:        2.5.0
Release:        0
Summary:        Glassfish Hundred Kilobytes Kernel
License:        EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
URL:            https://github.com/eclipse-ee4j/glassfish-hk2/
Source0:        https://github.com/eclipse-ee4j/glassfish-hk2/archive/%{version}-RELEASE/%{name}-%{version}.tar.gz
Source1:        https://github.com/eclipse-ee4j/glassfish-hk2-extra/archive/%{extra_version}-RELEASE/%{name}-extra-%{extra_version}.tar.gz
Source2:        hk2-inhabitant-generator-osgi.bundle
# unbundles tiger-types from hk2-utils osgi metadata and
# fixes invalid whitespace in hk2-core osgi metadata
Patch0:         0001-OSGi-metadata-fixes.patch
# fixed some test failures
Patch1:         0002-Fixed-tests.patch
# Module ambiguous in java 11
Patch2:         hk2-jdk11.patch
BuildRequires:  maven-local
BuildRequires:  mvn(aopalliance:aopalliance)
BuildRequires:  mvn(javax.annotation:javax.annotation-api)
BuildRequires:  mvn(javax.inject:javax.inject)
BuildRequires:  mvn(junit:junit)
BuildRequires:  mvn(org.apache.ant:ant)
BuildRequires:  mvn(org.apache.felix:maven-bundle-plugin)
BuildRequires:  mvn(org.apache.maven.plugins:maven-plugin-plugin)
BuildRequires:  mvn(org.apache.maven.shared:maven-osgi)
BuildRequires:  mvn(org.apache.maven:maven-core)
BuildRequires:  mvn(org.apache.maven:maven-plugin-api)
BuildRequires:  mvn(org.javassist:javassist)
BuildRequires:  mvn(org.osgi:osgi.cmpn)
BuildRequires:  mvn(org.osgi:osgi.core)
BuildRequires:  mvn(org.ow2.asm:asm-all)
BuildArch:      noarch
%ifarch %{ix86}
BuildConflicts: java >= 12
BuildConflicts: java-devel >= 12
BuildConflicts: java-headless >= 12
%endif
%if %{without jp_minimal}
BuildRequires:  mvn(args4j:args4j)
BuildRequires:  mvn(com.google.inject:guice)
BuildRequires:  mvn(com.google.protobuf:protobuf-java)
BuildRequires:  mvn(javax.el:javax.el-api)
BuildRequires:  mvn(javax.json:javax.json-api)
BuildRequires:  mvn(javax.validation:validation-api)
BuildRequires:  mvn(javax.xml.bind:jaxb-api)
BuildRequires:  mvn(org.apache.bcel:bcel)
BuildRequires:  mvn(org.apache.felix:org.apache.felix.bundlerepository)
BuildRequires:  mvn(org.apache.maven.plugins:maven-antrun-plugin)
BuildRequires:  mvn(org.apache.maven.plugins:maven-dependency-plugin)
BuildRequires:  mvn(org.assertj:assertj-core)
BuildRequires:  mvn(org.glassfish:javax.json)
BuildRequires:  mvn(org.hibernate:hibernate-validator)
BuildRequires:  mvn(org.mockito:mockito-core)
BuildRequires:  mvn(org.springframework:spring-context)
BuildRequires:  mvn(org.testng:testng)
%endif
%if %{with jp_minimal}
Obsoletes:      glassfish-hk2-dependency-verifier < %{version}-%{release}
Obsoletes:      glassfish-hk2-dependency-visualizer < %{version}-%{release}
Obsoletes:      glassfish-hk2-guice-bridge < %{version}-%{release}
Obsoletes:      glassfish-hk2-osgi < %{version}-%{release}
Obsoletes:      glassfish-hk2-spring-bridge < %{version}-%{release}
%endif

%description
HK2 for Hundred Kilobytes Kernel is an abstraction to
a module subsystem coupled with a simple yet powerful
component model to build server side software.

%package hk2
Summary:        HK2 module of HK2 itself

%description hk2
This is so that other modules can depend on HK2 as an HK2 module.

%package api
Summary:        HK2 API module

%description api
Hundred Kilobytes Kernel API module.

%package core
Summary:        HK2 core module

%description core
Hundred Kilobytes Kernel core module.

%package configuration
Summary:        HK2 configuration modules

%description configuration
Hundred Kilobytes Kernel configuration modules.

%package extras
Summary:        HK2 extras module

%description extras
Default implementations for HK2 services.

%package jmx
Summary:        HK2 JMX module

%description jmx
Hundred Kilobytes Kernel JMX module.

%package locator
Summary:        HK2 ServiceLocator Default Implementation

%description locator
Hundred Kilobytes Kernel ServiceLocator Default Implementation.

%package metadata-generator
Summary:        HK2 Metadata Generator

%description metadata-generator
HK2 Metadata Generator Subsystem.

%package runlevel
Summary:        HK2 Run Level Service

%description runlevel
Hundred Kilobytes Kernel Run Level Service.

%package utils
Summary:        HK2 Implementation Utilities

%description utils
Hundred Kilobytes Kernel Implementation Utilities.

%package class-model
Summary:        Class Model for Hk2

%description class-model
Hundred Kilobytes Kernel Class Model.

%package osgi-resource-locator
Summary:        HK2 OSGi resource locator bundle
Obsoletes:      osgi-resource-locator < %{version}-%{release}
Provides:       osgi-resource-locator = %{version}-%{release}

%description osgi-resource-locator
Hundred Kilobytes Kernel - OSGi resource locator bundle. Used by
various API providers that rely on META-INF/services mechanism to
locate providers.

%if %{without jp_minimal}
%package dependency-verifier
Summary:        HK2 Static Analyser for verifying module dependency

%description dependency-verifier
HK2 Static Analyser for verifying module dependency.

%package dependency-visualizer
Summary:        HK2 Tool to visualize the dependencies

%description dependency-visualizer
Tool to visualize the dependencies generated by HK2's dependency-verifier.

%package guice-bridge
Summary:        HK2 Guice Bridge

%description guice-bridge
Hundred Kilobytes Kernel Guice Bridge.

%package spring-bridge
Summary:        HK2 Spring Bridge

%description spring-bridge
Hundred Kilobytes Kernel Spring Bridge.

%package osgi
Summary:        HK2 OSGi Adapter

%description osgi
Hundred Kilobytes Kernel OSGi Adapter.
%endif

%package testing
Summary:        Utilities for testing with HK2
Obsoletes:      %{name}-locator-extras < %{version}-%{release}
Provides:       %{name}-locator-extras = %{version}-%{release}
Obsoletes:      %{name}-locator-no-proxies < %{version}-%{release}
Provides:       %{name}-locator-no-proxies = %{version}-%{release}
Obsoletes:      %{name}-locator-no-proxies2 < %{version}-%{release}
Provides:       %{name}-locator-no-proxies2 = %{version}-%{release}
Obsoletes:      %{name}-runlevel-extras < %{version}-%{release}
Provides:       %{name}-runlevel-extras = %{version}-%{release}
Obsoletes:      %{name}-testng < %{version}-%{release}
Provides:       %{name}-testng = %{version}-%{release}

%description testing
Hundred Kilobytes Kernel utilities for testing.

%package maven-plugins
Summary:        HK2 Maven Plug-ins
Obsoletes:      %{name}-maven < %{version}-%{release}
Provides:       %{name}-maven < %{version}-%{release}
Obsoletes:      %{name}-inhabitant-generator < %{version}-%{release}
Provides:       %{name}-inhabitant-generator < %{version}-%{release}

%description maven-plugins
This package provides various maven plug-ins:
* consolidatedbundle-maven-plugin
* osgiversion-maven-plugin
* hk2-inhabitant-generator

%package javadoc
Summary:        Javadoc for %{name}

%description javadoc
This package contains API documentation for %{name}.

%prep
%setup -q -n glassfish-hk2-%{version}-RELEASE
%patch0 -p1
%patch1 -p1
%patch2 -p1

# Disable tests that intermittently fail on ARM arches
sed -i -e '/org\.junit\.Ignore/s/\/\///' \
  hk2-locator/src/test/java/org/glassfish/hk2/tests/locator/multithreaded1/MultiThreaded1Test.java

# Explode extra bundles and insert into the build
tar xf %{SOURCE1} --strip-components=1 \
  %{name}-extra-%{extra_version}-RELEASE/osgi-resource-locator \
  %{name}-extra-%{extra_version}-RELEASE/dependency-{verifier,visualizer}
%pom_xpath_set "pom:dependency[pom:groupId ='org.glassfish.hk2']/pom:version" %{version} dependency-verifier
for mod in osgi-resource-locator dependency-verifier dependency-visualizer ; do
  %pom_xpath_inject "pom:modules" "<module>$mod</module>"
  %pom_remove_parent $mod
  %pom_add_parent "org.glassfish.hk2:hk2-parent:%{version}" $mod
done

# Do not remove test resources
find . -name '*.jar' ! -name "gendir.jar" -type f -print -delete
find . -name '*.class' -print -delete

# EE4j parent pom contains only release/nexus related stuff, we won't miss it
%pom_remove_parent bom .

# Some Glassfish APIs that moved to the EE4j project are not yet updated in openSUSE
# provide the new Jakarta maven coords, so continue to use the old javax coords for now
%pom_change_dep -r jakarta.servlet:jakarta.servlet-api javax.servlet:javax.servlet-api
%pom_change_dep -r jakarta.annotation:jakarta.annotation-api javax.annotation:javax.annotation-api
%pom_change_dep -r jakarta.el:jakarta.el-api javax.el:javax.el-api
%pom_change_dep -r jakarta.json:jakarta.json-api javax.json:javax.json-api
%pom_change_dep -r org.glassfish:jakarta.json org.glassfish:javax.json
%pom_change_dep -r org.glassfish.hk2.external:jakarta.inject javax.inject:javax.inject

# Use system libraries, not bundled versions
%pom_change_dep -r org.glassfish.hk2.external:asm-repackaged org.ow2.asm:asm-all:'${asm.version}'
%pom_change_dep -r org.glassfish.hk2.external:aopalliance-repackaged aopalliance:aopalliance:'${aopalliance.version}'
find class-model maven-plugins/hk2-inhabitant-generator hk2-testing/hk2-junitrunner \
   -name "*.java" -exec sed -i "s/org.glassfish.hk2.external.org.objectweb.asm/org.objectweb.asm/g" {} +

# Fix version of deps from hk2 extra
%pom_change_dep :osgi-resource-locator ::%{extra_version}

# Enterprise APIs are a subset of those provided by the Compendium APIs
%pom_remove_dep org.osgi:org.osgi.enterprise
%pom_change_dep :org.osgi.enterprise org.osgi:osgi.cmpn:6.0.0 class-model

# Remove plugins not necessary for RPM builds
%pom_remove_plugin :maven-download-plugin
%pom_remove_plugin :maven-site-plugin
%pom_remove_plugin :maven-eclipse-plugin
%pom_remove_plugin :maven-enforcer-plugin
%pom_remove_plugin :findbugs-maven-plugin
%pom_remove_plugin :jacoco-maven-plugin
%pom_remove_dep :jacoco-maven-plugin
%pom_remove_plugin :maven-jar-plugin osgi-resource-locator
%pom_remove_plugin :maven-source-plugin osgi-resource-locator
%pom_remove_plugin :maven-javadoc-plugin osgi-resource-locator
%pom_remove_plugin :maven-release-plugin osgi-resource-locator
%pom_remove_plugin :maven-gpg-plugin osgi-resource-locator
%pom_xpath_remove "pom:plugin[pom:artifactId ='maven-jar-plugin']/pom:executions" hk2

# Don't ship re-packaged external deps or examples
%pom_disable_module external
%pom_disable_module examples

# Disable modules and tests that require org.ops4j.*
# These are not available in Fedora
%pom_disable_module osgi-adapter-test osgi/adapter-tests
%pom_remove_dep org.ops4j.pax.exam:
%pom_remove_dep org.ops4j.pax.url:
%pom_remove_dep org.ops4j.pax.logging:

# Disable test that would introduce circular deps
%pom_disable_module jersey hk2-testing

%if %{with jp_minimal}
# Disable modules with extra deps when building with jp_minimal
%pom_disable_module dependency-verifier
%pom_disable_module dependency-visualizer
%pom_disable_module osgi
%pom_disable_module guice-bridge
%pom_disable_module spring-bridge
%pom_remove_dep :osgi-adapter bom
%pom_remove_dep :guice-bridge bom
%pom_remove_dep :spring-bridge bom
%pom_disable_module hk2-xml hk2-configuration/persistence
# Build minimal testing utilities when building with jp_minimal
%pom_xpath_set "pom:modules" "<module>hk2-junitrunner</module>" hk2-testing
# Avoid dep on hibernate when building with jp_minimal
%pom_remove_dep javax.validation:validation-api hk2-utils
%pom_remove_dep org.hibernate:hibernate-validator hk2-utils
%pom_remove_dep javax.el:javax.el-api hk2-utils
rm hk2-utils/src/main/java/org/glassfish/hk2/utilities/general/ValidatorUtilities.java \
   hk2-utils/src/main/java/org/glassfish/hk2/utilities/general/internal/MessageInterpolatorImpl.java \
   hk2-utils/src/test/java/org/glassfish/hk2/utilities/test/ValidatorTest.java
%endif

# FIXME remove a broken test
rm hk2-runlevel/src/test/java/org/glassfish/hk2/runlevel/tests/listener/ListenerErrorTest.java

# Remove pointless unused dependencies
# Patch submitted upstream, see https://github.com/eclipse-ee4j/glassfish-hk2/pull/445
%pom_remove_dep org.osgi:osgi_R4_core
%pom_remove_dep :com.springsource.org.junit

# Remove some optional deps
%pom_remove_dep -r :jboss-logging
%pom_remove_dep -r :classmate

# Disable security policy that interferes with tests
%pom_xpath_remove "pom:plugin[pom:artifactId ='maven-surefire-plugin']/pom:configuration" hk2-api
%pom_xpath_remove "pom:plugin[pom:artifactId ='maven-surefire-plugin']/pom:configuration" hk2-locator

# Fix reference to JDK tools jar
%pom_xpath_set "pom:dependency[pom:groupId ='com.sun']/pom:artifactId" tools hk2-testing/ant
%pom_xpath_remove "pom:dependency[pom:groupId ='com.sun']/pom:scope" hk2-testing/ant
%pom_xpath_remove "pom:dependency[pom:groupId ='com.sun']/pom:systemPath" hk2-testing/ant
%pom_xpath_remove "pom:profiles/pom:profile[pom:id ='mac']" hk2-testing/ant

# Don't put classpath in jar manifest
%pom_xpath_set "pom:addClasspath" false dependency-verifier

mkdir -p hk2/target/classes

# Drop pre-existent OSGI manifest file
rm maven-plugins/hk2-inhabitant-generator/src/main/resources/META-INF/MANIFEST.MF
%pom_add_plugin org.apache.felix:maven-bundle-plugin maven-plugins/hk2-inhabitant-generator '
<configuration>
  <supportedProjectTypes>
   <supportedProjectType>maven-plugin</supportedProjectType>
  </supportedProjectTypes>
</configuration>
<executions>
  <execution>
    <id>bundle-manifest</id>
    <phase>process-classes</phase>
    <goals>
      <goal>manifest</goal>
    </goals>
  </execution>
</executions>'

# Add configuration file for osgiversion plugin
cp -p %{SOURCE2} maven-plugins/hk2-inhabitant-generator/osgi.bundle
%pom_add_plugin org.glassfish.hk2:osgiversion-maven-plugin:'${project.version}' maven-plugins/hk2-inhabitant-generator

# Inject manifest file
%pom_add_plugin org.apache.maven.plugins:maven-jar-plugin:2.4 maven-plugins/hk2-inhabitant-generator "
<configuration>
  <archive>
    <manifestFile>\${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
    <manifestEntries>
      <service>foo</service>
    </manifestEntries>
  </archive>
</configuration>"

# fix build failure. 'useDefaultManifestFile' has been removed from the maven-jar-plugin >= 3.0.0
%pom_xpath_remove "pom:plugin[pom:artifactId = 'maven-jar-plugin']/pom:configuration/pom:useDefaultManifestFile" . hk2-utils
%pom_xpath_inject "pom:plugin[pom:artifactId = 'maven-jar-plugin']/pom:configuration/pom:archive" \
  "<manifestFile>\${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>" hk2-utils

# For every module that generates a OSGi manifest, add it to the jar
# Remove this when upstream moves to maven-jar-plugin >= 3.0.0
for mod in $(grep -l maven-bundle-plugin $(find */ -name pom.xml) ) ; do
  if [ "$(dirname $mod)" = "hk-utils" ] ; then
    continue
  fi
  %pom_add_plugin org.apache.maven.plugins:maven-jar-plugin $mod "
<configuration>
  <archive>
    <manifestFile>\${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
  </archive>
</configuration>"
done

# This causes the plugin not to try to build with source/target 1.5
%pom_remove_plugin :maven-compiler-plugin maven-plugins/consolidatedbundle-maven-plugin

# Don't package unit test jars
%{mvn_package} ":::tests:" __noinstall

# Create subpackages
%{mvn_package} ":hk2-bom" %{name}
%{mvn_package} ":hk2-parent" %{name}
%{mvn_package} ":hk2" hk2
%{mvn_package} ":hk2-api" api
%{mvn_package} ":hk2-core" core
%{mvn_package} ":hk2-configuration" configuration
%{mvn_package} ":hk2-configuration-hub" configuration
%{mvn_package} ":hk2-configuration-integration" configuration
%{mvn_package} ":hk2-configuration-persistence" configuration
%{mvn_package} ":hk2-property-file" configuration
%{mvn_package} ":hk2-xml-parent" configuration
%{mvn_package} ":hk2-xml-schema" configuration
%{mvn_package} ":hk2-xml-integration-test" __noinstall
%{mvn_package} ":hk2-xml-test" __noinstall
%{mvn_package} ":hk2-json" configuration
%{mvn_package} ":hk2-pbuf" configuration
%{mvn_package} ":hk2-xml" configuration
%{mvn_package} ":hk2-extras" extras
%{mvn_package} ":hk2-jmx" jmx
%{mvn_package} ":hk2-locator" locator
%{mvn_package} ":hk2-metadata-generator" metadata-generator
%{mvn_package} ":hk2-metadata-generator-parent" metadata-generator
%{mvn_package} ":hk2-metadata-generator-test1" __noinstall
%{mvn_package} ":hk2-runlevel" runlevel
%{mvn_package} ":hk2-utils" utils
%{mvn_package} ":class-model" class-model
%{mvn_package} ":osgi-resource-locator" osgi-resource-locator
%{mvn_package} ":hk2-dependency-verifier" dependency-verifier
%{mvn_package} ":hk2-dependency-visualizer" dependency-visualizer
%{mvn_package} ":guice-bridge" guice-bridge
%{mvn_package} ":spring-bridge" spring-bridge
%{mvn_package} ":osgi" osgi
%{mvn_package} ":osgi-adapter" osgi
%{mvn_package} ":osgi-adapter-tests-parent" __noinstall
%{mvn_package} ":contract-bundle" __noinstall
%{mvn_package} ":faux-sdp-bundle" __noinstall
%{mvn_package} ":no-hk2-bundle" __noinstall
%{mvn_package} ":osgi-adapter-test" __noinstall
%{mvn_package} ":sdp-management-bundle" __noinstall
%{mvn_package} ":test-module-startup" __noinstall

# Testing modules
%{mvn_package} ":hk2-testing" testing
%{mvn_package} ":hk2-ant-test" testing
%{mvn_package} ":hk2-collections-tests" testing
%{mvn_package} ":hk2-junitrunner" testing
%{mvn_package} ":hk2-locator-extras" testing
%{mvn_package} ":hk2-locator-no-proxies" testing
%{mvn_package} ":hk2-locator-no-proxies2" testing
%{mvn_package} ":hk2-mockito" testing
%{mvn_package} ":hk2-runlevel-extras" testing
%{mvn_package} ":hk2-testng" testing
%{mvn_package} ":interceptor-events" testing

# Maven plug-ins
%{mvn_package} ":maven-plugins" maven-plugins
%{mvn_package} ":consolidatedbundle-maven-plugin" maven-plugins
%{mvn_package} ":hk2-inhabitant-generator" maven-plugins
%{mvn_package} ":osgiversion-maven-plugin" maven-plugins

%build
%{mvn_build} -f -- \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 9}%{!?pkg_vcmp:0}
	-Dmaven.compiler.release=7 \
%endif
	-Dhk2.mvn.plugins.version=%{version}

%install
%mvn_install

%files -f .mfiles-%{name}
%doc README.md
%license LICENSE.md NOTICE.md

%files hk2 -f .mfiles-hk2
%license LICENSE.md NOTICE.md

%files api -f .mfiles-api
%license LICENSE.md NOTICE.md

%files core -f .mfiles-core
%license LICENSE.md NOTICE.md

%files configuration -f .mfiles-configuration
%license LICENSE.md NOTICE.md

%files extras -f .mfiles-extras
%license LICENSE.md NOTICE.md

%files jmx -f .mfiles-jmx
%license LICENSE.md NOTICE.md

%files locator -f .mfiles-locator
%license LICENSE.md NOTICE.md

%files metadata-generator -f .mfiles-metadata-generator
%license LICENSE.md NOTICE.md

%files runlevel -f .mfiles-runlevel
%license LICENSE.md NOTICE.md

%files utils -f .mfiles-utils
%license LICENSE.md NOTICE.md

%files class-model -f .mfiles-class-model
%license LICENSE.md NOTICE.md

%files osgi-resource-locator -f .mfiles-osgi-resource-locator
%license LICENSE.md NOTICE.md

%if %{without jp_minimal}
%files dependency-verifier -f .mfiles-dependency-verifier
%license LICENSE.md NOTICE.md

%files dependency-visualizer -f .mfiles-dependency-visualizer
%doc dependency-visualizer/README
%license LICENSE.md NOTICE.md

%files guice-bridge -f .mfiles-guice-bridge
%license LICENSE.md NOTICE.md

%files spring-bridge -f .mfiles-spring-bridge
%license LICENSE.md NOTICE.md

%files osgi -f .mfiles-osgi
%license LICENSE.md NOTICE.md
%endif

%files testing -f .mfiles-testing
%license LICENSE.md NOTICE.md

%files maven-plugins -f .mfiles-maven-plugins
%license LICENSE.md NOTICE.md

%files javadoc -f .mfiles-javadoc
%license LICENSE.md NOTICE.md

%changelog
openSUSE Build Service is sponsored by