File maven3.spec of Package maven3

#
# spec file for package maven3
#
# Copyright (c) 2025 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 base_name maven
%global maven_version_suffix 3
%global bundled_slf4j_version 1.7.25
Name:           %{base_name}%{maven_version_suffix}
Version:        3.9.11
Release:        0
Summary:        Java project management and project comprehension tool
# maven itself is ASL 2.0
# bundled slf4j is MIT
License:        Apache-2.0 AND MIT
Group:          Development/Tools/Building
URL:            https://maven.apache.org/
Source0:        http://archive.apache.org/dist/%{base_name}/%{base_name}-%{maven_version_suffix}/%{version}/source/apache-%{base_name}-%{version}-src.tar.gz
Source10:       apache-%{base_name}-build.tar.xz
Patch1:         0001-Adapt-mvn-script.patch
# Downstream-specific, avoids dependency on logback
Patch2:         0002-Invoke-logback-via-reflection.patch
Patch3:         0003-Remove-dependency-on-powermock.patch
Patch4:         0004-Fix-build-with-qdox-2.0.1.patch
Patch5:         0005-Reproducible-maven.build.timestamp.patch
BuildRequires:  ant
BuildRequires:  apache-commons-cli
BuildRequires:  atinject
BuildRequires:  fdupes
BuildRequires:  glassfish-annotation-api
BuildRequires:  google-guice
BuildRequires:  jakarta-inject
BuildRequires:  javapackages-local
BuildRequires:  maven-resolver1-api
BuildRequires:  maven-resolver1-impl
BuildRequires:  maven-resolver1-named-locks
BuildRequires:  maven-resolver1-spi
BuildRequires:  maven-resolver1-util
BuildRequires:  maven-shared-utils
BuildRequires:  maven-wagon-provider-api
BuildRequires:  modello
BuildRequires:  objectweb-asm
BuildRequires:  plexus-cipher
BuildRequires:  plexus-classworlds
BuildRequires:  plexus-containers-component-annotations
BuildRequires:  plexus-interpolation
BuildRequires:  plexus-metadata-generator
BuildRequires:  plexus-sec-dispatcher1
BuildRequires:  plexus-utils
BuildRequires:  plexus-xml-bootstrap
BuildRequires:  sisu-inject
BuildRequires:  sisu-plexus
BuildRequires:  slf4j
BuildRequires:  slf4j-sources
BuildRequires:  xmvn-install
BuildRequires:  xmvn-resolve
BuildRequires:  mvn(org.apache.maven:maven-parent:pom:)
#!BuildIgnore:  maven-bootstrap
#!BuildIgnore:  maven-lib
#!BuildIgnore:  plexus-xml
Requires:       %{name}-lib = %{version}-%{release}
Requires(post): aaa_base
Requires(postun): aaa_base
BuildArch:      noarch

%description
Maven is a software project management and comprehension tool. Based on the
concept of a project object model (POM), Maven can manage a project's build,
reporting and documentation from a central piece of information.

%package        lib
Summary:        Core part of Maven
Group:          Development/Tools/Building

%description    lib
Core part of Apache Maven that can be used as a library.

%package        javadoc
Summary:        API documentation for %{name}
Group:          Documentation/HTML
BuildArch:      noarch

%description    javadoc
%{summary}.

%prep
%setup -q -n apache-%{base_name}-%{version} -a10

%patch -P 1 -p1
%patch -P 2 -p1
%patch -P 3 -p1
%patch -P 4 -p1
%patch -P 5 -p1

# not really used during build, but a precaution
find -name '*.jar' -not -path '*/test/*' -delete
find -name '*.class' -delete
find -name '*.bat' -delete

sed -i 's:\r::' apache-maven/src/conf/settings.xml

# Downloads dependency licenses from the Internet and aggregates them.
# We already ship the licenses in their respective packages.
rm apache-maven/src/main/appended-resources/META-INF/LICENSE.vm

# Disable plugins which are not useful for us
%pom_remove_plugin -r :animal-sniffer-maven-plugin
%pom_remove_plugin -r :apache-rat-plugin
%pom_remove_plugin -r :maven-site-plugin
%pom_remove_plugin -r :buildnumber-maven-plugin
sed -i "
/buildNumber=/ d
/timestamp=/ d
" `find -name build.properties`
sed -i "s/version=.*/version=%{version}/" `find -name build.properties`
sed -i "s/distributionId=.*/distributionId=apache-maven/" `find -name build.properties`
sed -i "s/distributionShortName=.*/distributionShortName=Maven/" `find -name build.properties`
sed -i "s/distributionName=.*/distributionName=Apache\ Maven/" `find -name build.properties`

%{mvn_package} :apache-maven __noinstall

%pom_remove_dep -r :logback-classic

%pom_change_dep -r :plexus-sec-dispatcher org.sonatype.plexus::1.4

%pom_xpath_remove pom:parent/pom:relativePath

%pom_xpath_set pom:project/pom:properties/pom:resolverVersion 1

for i in maven-compat maven-core maven-embedder maven-model maven-model-builder maven-plugin-api maven-resolver-provider maven-settings-builder
do
  %pom_add_dep org.codehaus.plexus:plexus-xml:3.0.0 $i
done

%{mvn_alias} :maven-resolver-provider :maven-aether-provider
%{mvn_compat_version} : %{maven_version_suffix} %{version}
%{mvn_file} :{*} %{base_name}/@1

%build
mkdir -p lib
build-jar-repository -s lib \
    atinject \
    commons-cli \
    glassfish-annotation-api \
    guice/google-guice \
    jakarta-inject \
    maven-resolver/maven-resolver-api-1 \
    maven-resolver/maven-resolver-impl-1 \
    maven-resolver/maven-resolver-named-locks-1 \
    maven-resolver/maven-resolver-spi-1 \
    maven-resolver/maven-resolver-util-1 \
    maven-shared-utils/maven-shared-utils \
    maven-wagon/provider-api \
    objectweb-asm/asm-commons \
    objectweb-asm/asm \
    org.eclipse.sisu.inject \
    org.eclipse.sisu.plexus \
    plexus-classworlds \
    plexus-containers/plexus-component-annotations \
    plexus/interpolation \
    plexus/plexus-cipher \
    plexus/plexus-sec-dispatcher1 \
    plexus/utils \
    plexus/xml \
    slf4j/api \
    slf4j/simple
ln -s $(build-classpath slf4j/slf4j-simple-sources) lib/
%{ant} \
  -Dtest.skip=true \
  package javadoc

%{mvn_artifact} pom.xml
mkdir -p target/site/apidocs
for i in \
    artifact \
    model \
    plugin-api \
    builder-support \
    model-builder \
    settings \
    settings-builder \
    repository-metadata \
    resolver-provider \
    core \
    compat; do
  cp -r %{base_name}-${i}/target/site/apidocs target/site/apidocs/%{base_name}-${i}
  %{mvn_artifact} %{base_name}-${i}/pom.xml %{base_name}-${i}/target/%{base_name}-${i}-%{version}.jar
done

%install
%mvn_install
%fdupes %{buildroot}%{_javadocdir}

%files lib -f .mfiles
%doc README.md
%license LICENSE NOTICE

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

%changelog
openSUSE Build Service is sponsored by