blob: 48d8ce1cbbdd980d7bcac8d1599ffe0fc48dd977 [file]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau</artifactId>
<version>10.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Apache Juneau</name>
<description>Apache Juneau</description>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>37</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
<!-- Configure checksum algorithms: MD5, SHA-1, and SHA-512 -->
<aether.checksums.algorithms>MD5,SHA-1,SHA-512</aether.checksums.algorithms>
<juneau.compare.version>9.0.1</juneau.compare.version>
<junit.version>6.0.3</junit.version>
<javadoc.plugin.version>3.11.3</javadoc.plugin.version>
<jacoco.plugin.version>0.8.15</jacoco.plugin.version>
<jetty.version>12.1.9</jetty.version>
<jetty.ee.version>11</jetty.ee.version>
<tomcat.version>11.0.21</tomcat.version>
<spring.version>4.0.6</spring.version>
<sonar.organization>apache</sonar.organization>
<!-- javadoc.css uses custom HTML element selectors (ja, jc, jd, ...) for Javadoc syntax highlighting; css:S4670 false positives. -->
<sonar.issue.ignore.multicriteria>e1,e2</sonar.issue.ignore.multicriteria>
<sonar.issue.ignore.multicriteria.e1.ruleKey>css:S4670</sonar.issue.ignore.multicriteria.e1.ruleKey>
<sonar.issue.ignore.multicriteria.e1.resourceKey>**/javadoc.css</sonar.issue.ignore.multicriteria.e1.resourceKey>
<!-- HTTP-status response/exception beans (BasicHttpResponse/BasicHttpException CRTP+immutability hierarchy, TODO-273) are intentionally >5 ancestors deep; not a design smell to flatten. -->
<sonar.issue.ignore.multicriteria.e2.ruleKey>java:S110</sonar.issue.ignore.multicriteria.e2.ruleKey>
<sonar.issue.ignore.multicriteria.e2.resourceKey>**/http/response/**</sonar.issue.ignore.multicriteria.e2.resourceKey>
<!-- Coverage/exclusion config for the SonarScanner-for-Maven (used by CI in .github/workflows/sonarcloud.yml). -->
<!-- The Maven scanner reads these from the POM and ignores sonar-project.properties. -->
<!-- Aggregate report (cross-module integration-test coverage) via reactor-root path, per-module report via basedir fallback. -->
<sonar.coverage.jacoco.xmlReportPaths>${maven.multiModuleProjectDirectory}/juneau-integration-tests/target/site/jacoco-aggregate/jacoco.xml,${project.basedir}/target/site/jacoco/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.exclusions>**/target/**,**/doc/**,**/examples/**,**/src/main/resources/**,**/src/test/resources/**,**/generated/**,**/build/**</sonar.exclusions>
<!-- Exclude by-design parallel families from copy-paste detection (near-verbatim clones by design, not debt). Unique classes keep full CPD coverage. -->
<!-- 1) rest-server @RestX annotations + companion *Annotation impls (one per HTTP verb / lifecycle hook). -->
<!-- 2) marshaller facades (one thin Serializer+Parser pairing per format) under marshall/marshaller and marshall/jena/marshaller. -->
<!-- 3) RDF (jena) serializer/parser/session families - parallel RDF-format bindings mirroring the core marshall framework. -->
<!-- 4) generated-style annotation builders (Items/SubItems/Marshalled/MarshalledProp/RdfConfig) and their @Items/@SubItems interfaces. -->
<!-- 5) format-mirrored tokenizers, binary serializer sessions, schema serializers, csv/url-encoding serializer-parser pairs, JsonList/JsonMap. -->
<!-- 6) rest-server group/admin/health resource-servlet-mixin flavors, classic *BeanMeta, and parallel OAuth flow impls. -->
<sonar.cpd.exclusions>**/rest/server/Rest*Annotation.java,**/rest/server/RestOp.java,**/rest/server/RestGet.java,**/rest/server/RestPut.java,**/rest/server/RestPost.java,**/rest/server/RestDelete.java,**/rest/server/RestPatch.java,**/rest/server/RestOptions.java,**/rest/server/RestPreCall.java,**/rest/server/RestPostCall.java,**/rest/server/RestStartCall.java,**/rest/server/RestEndCall.java,**/rest/server/RestInit.java,**/rest/server/RestDestroy.java,**/rest/server/RestPostInit.java,**/marshall/marshaller/*.java,**/marshall/jena/marshaller/*.java,**/marshall/jena/Rdf*Serializer*.java,**/marshall/jena/Rdf*Parser*.java,**/marshall/ItemsAnnotation.java,**/marshall/SubItemsAnnotation.java,**/marshall/MarshalledAnnotation.java,**/marshall/MarshalledPropAnnotation.java,**/marshall/jena/RdfConfigAnnotation.java,**/commons/Items.java,**/commons/SubItems.java,**/marshall/MarshalledProp.java,**/marshall/hjson/HjsonTokenizer.java,**/marshall/hocon/HoconTokenizer.java,**/marshall/msgpack/MsgPackSerializerSession.java,**/marshall/cbor/CborSerializerSession.java,**/marshall/html/HtmlSchema*Serializer.java,**/marshall/json/JsonSchemaSerializer.java,**/marshall/csv/CsvSerializer.java,**/marshall/csv/CsvParser.java,**/marshall/urlencoding/UrlEncodingParser.java,**/marshall/html/HtmlClassMeta.java,**/marshall/collections/JsonList.java,**/marshall/collections/JsonMap.java,**/rest/server/servlet/BasicRest*Group.java,**/rest/server/ops/AdminResource.java,**/rest/server/ops/AdminServlet.java,**/rest/server/health/HealthResource.java,**/rest/server/health/HealthMixin.java,**/rest/server/health/HealthServlet.java,**/http/classic/header/HeaderBeanMeta.java,**/http/classic/part/PartBeanMeta.java,**/rest/server/auth/oauth/flow/OAuth*Flow.java</sonar.cpd.exclusions>
<sonar.coverage.exclusions>**/juneau-examples/**,**/juneau-petstore/**,**/*-microservice/**,**/juneau-sc-server/**,**/juneau-core/juneau-test-utils/**</sonar.coverage.exclusions>
<jena.version>5.6.0</jena.version>
<!-- Hoisted from owning modules so the juneau-bom + curated bundles can pin one coherent version source. -->
<micrometer.version>1.13.6</micrometer.version>
<opentelemetry.version>1.63.0</opentelemetry.version>
<jakarta.servlet-api.version>6.1.0</jakarta.servlet-api.version>
<jakarta.validation-api.version>3.0.2</jakarta.validation-api.version>
<logback.version>1.5.18</logback.version>
<log4j.version>2.24.3</log4j.version>
</properties>
<modules>
<module>juneau-bom</module>
<module>juneau-bundles</module>
<module>juneau-core</module>
<module>juneau-rest</module>
<module>juneau-microservice</module>
<module>juneau-sc</module>
<module>juneau-examples</module>
<module>juneau-petstore</module>
<module>juneau-integration-tests</module>
<module>juneau-bean</module>
<module>juneau-shaded</module>
<module>juneau-distrib</module>
</modules>
<distributionManagement>
<site>
<id>${project.artifactId}-site</id>
<url>file:///tmp/site</url>
</site>
</distributionManagement>
<build>
<defaultGoal>clean verify</defaultGoal>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.6.3</version>
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<!--
Runs Apache Rat against all source code to make sure all files have licenses.
-->
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<!--
! Can be removed if updated to asf parent version 19.
-->
<configuration>
<excludes>
<exclude>**/DEPENDENCIES</exclude>
<exclude>**/target/**</exclude>
<exclude>**/empty.txt</exclude>
<exclude>**/TODO.txt</exclude>
<exclude>**/*.md</exclude>
<exclude>**/*.svg</exclude>
<exclude>**/*.nojekyll</exclude>
<exclude>/docs/static/site/**</exclude>
<exclude>**/javadocs/**</exclude>
<!-- Eclipse metadata files -->
<exclude>**/.settings/**</exclude>
<exclude>**/.project</exclude>
<exclude>**/.classpath</exclude>
<exclude>**/*.launch</exclude>
<exclude>**/*.prefs</exclude>
<exclude>**/*.gitattributes</exclude>
<!-- Overlay files -->
<exclude>**/*.2</exclude>
<!-- Generated by embedded jetty server -->
<exclude>**/jetty.out.xml</exclude>
<exclude>**/*.log</exclude>
<exclude>**/*.log.*</exclude>
<!-- Generated in juneau-microservice-template for some reason -->
<exclude>**/dependency-reduced-pom.xml</exclude>
<!-- Generated by docs -->
<exclude>**/docs.txt</exclude>
<exclude>**/toc.txt</exclude>
<!-- Files needed by Heroku as-is -->
<exclude>**/app.json</exclude>
<exclude>**/Procfile</exclude>
<exclude>**/.asf.yaml</exclude>
<!-- ServiceLoader provider files - plain text, no comment syntax for license headers -->
<exclude>**/META-INF/services/**</exclude>
<!-- OpenRewrite recipe files - YAML has no comment syntax for ASF license headers -->
<exclude>**/META-INF/rewrite/**</exclude>
<exclude>rewrite.yml</exclude>
<!-- Performance baseline data file - plain text metrics, no license header syntax -->
<exclude>**/perf-baseline.txt</exclude>
<exclude>**/test-run-history.tsv</exclude>
<!-- JMH micro-benchmark output directory - generated result data + .gitkeep placeholder, no license header syntax -->
<exclude>**/jmh-results/**</exclude>
</excludes>
<consoleOutput>true</consoleOutput>
<!-- Note: useEclipseDefaultExcludes does not work for subprojects. See RAT-107 -->
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.12.0</version>
<configuration>
<skip>false</skip>
<release>${maven.compiler.target}</release>
<sourcetab>3</sourcetab>
<verbose>true</verbose>
<additionalJOptions>
<additionalJOption>--allow-script-in-comments</additionalJOption>
<additionalJOption>-Xdoclint:none</additionalJOption>
<additionalJOption>-header</additionalJOption>
<additionalJOption>&lt;a href="http://juneau.apache.org" target="_blank"&gt;&lt;img src="/img/oakleaf.svg" alt="Apache Juneau" style="height:20px; vertical-align:middle; margin-right:5px;"&gt;Apache Juneau&lt;/a&gt;</additionalJOption>
</additionalJOptions>
<additionalOptions>
<additionalOption>-quiet</additionalOption>
</additionalOptions>
<show>protected</show>
<windowtitle>Apache Juneau ${project.version}</windowtitle>
<author>true</author>
<linksource>true</linksource>
<use>true</use>
<notree>false</notree>
<noindex>false</noindex>
<nooverview>false</nooverview>
<nohelp>false</nohelp>
<nodeprecatedlist>false</nodeprecatedlist>
<doctitle>Apache Juneau ${project.version} API</doctitle>
<stylesheetfile>${maven.multiModuleProjectDirectory}/docs/src/javadoc/javadoc.css</stylesheetfile>
<overview>${maven.multiModuleProjectDirectory}/docs/src/javadoc/overview.html</overview>
<excludePackageNames>*proto*:*test*:*internal*</excludePackageNames>
<links>
<link>https://docs.oracle.com/en/java/javase/${maven.compiler.target}/docs/api/</link>
<link>https://jakarta.ee/specifications/platform/8/apidocs/</link>
<link>https://hc.apache.org/httpcomponents-client-4.5.x/current/httpclient/apidocs/</link>
<link>https://hc.apache.org/httpcomponents-core-4.4.x/current/httpcore/apidocs/</link>
</links>
<failOnError>false</failOnError>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.15.0</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<!--compilerArgument>-parameters</compilerArgument>
<testCompilerArgument>-parameters</testCompilerArgument-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>6.0.2</version>
</plugin>
<!--
Quiet-by-default test logging, applied reactor-wide to every module's Surefire run.
Both properties point at a single shared config file at the reactor root, so there is
exactly one source of truth (no per-module copies to drift apart):
- Logback (logback.configurationFile): root level=WARN - genuine WARN/ERROR still print,
only INFO startup chatter is removed.
- JUL (java.util.logging.config.file): ConsoleHandler=WARNING (never OFF), so real
WARNING/SEVERE still surface.
Modules that define their own surefire <systemPropertyVariables> (e.g. java.locale.providers)
merge with these; module-level keys win on conflict. See src/test/resources/.
Deliberately does NOT set <excludedGroups>, nor define an "excludedGroups" property, anywhere
in this root pom: Surefire's excludedGroups mojo parameter is bound to a property of the
same name (so -DexcludedGroups=... works with zero pom.xml wiring), which means merely
declaring an "excludedGroups" property in <properties> - even with no <configuration> use -
would feed every module's Surefire execution reactor-wide via inheritance. Surefire hard-
fails a module with "groups/excludedGroups require TestNG, JUnit48+ or JUnit 5" as soon as
that parameter is non-null, even when it resolves to an empty string - and several modules
(e.g. juneau-rest-server-rdf) have no JUnit5 engine on their test classpath. Only the
modules that actually contain @Tag("manual") tests (currently juneau-marshall and
juneau-integration-tests) declare their own local "excludedGroups" property (default
"manual", still overridable via -DexcludedGroups=) and wire it into their own Surefire
config, since only those modules are guaranteed to have the JUnit5 engine present.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<logback.configurationFile>${maven.multiModuleProjectDirectory}/src/test/resources/logback-test.xml</logback.configurationFile>
<java.util.logging.config.file>${maven.multiModuleProjectDirectory}/src/test/resources/logging.properties</java.util.logging.config.file>
<!-- Embedded Jetty logs through its own jetty-slf4j-impl StdErrLog (not logback/JUL),
so raise its root threshold to WARN to silence server startup/stop INFO chatter. -->
<org.eclipse.jetty.LEVEL>WARN</org.eclipse.jetty.LEVEL>
<!-- Spring Boot reinitializes its own logging on context start, overriding the logback
config file; set its root level to WARN so embedded Tomcat/Spring startup INFO is
suppressed while real WARN/ERROR still prints. -->
<logging.level.root>WARN</logging.level.root>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.plugin.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>5.7.0.6970</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<!-- Same version as org.apache:apache:30 for now -->
<version>3.6.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<!-- version > 3.3.0 suffers from https://issues.apache.org/jira/browse/MSOURCES-143 -->
<version>3.4.0</version>
<configuration>
<excludes>
<exclude>scripts/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<arguments>-Daether.checksums.algorithms=MD5,SHA-1,SHA-512</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.42.0</version>
<configuration>
<activeRecipes/>
<exportDatatables>false</exportDatatables>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite</groupId>
<artifactId>rewrite-java</artifactId>
<version>8.38.0</version>
</dependency>
<dependency>
<groupId>org.openrewrite</groupId>
<artifactId>rewrite-java-17</artifactId>
<version>8.38.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>aggregate</report>
</reports>
</reportSet>
</reportSets>
<configuration>
<skip>false</skip>
<failOnError>false</failOnError>
<detectJavaApiLink>false</detectJavaApiLink>
<additionalOptions>
<additionalOption>-quiet</additionalOption>
</additionalOptions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>3.6.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<!-- JaCoCo aggregate report is generated in juneau-integration-tests module -->
</plugins>
</reporting>
<url>https://juneau.apache.org/</url>
<!--
Inherited from parent pom
<organization>
<name>The Apache Software Foundation</name>
<url>https://www.apache.org/</url>
</organization>
-->
<inceptionYear>2016</inceptionYear>
<scm>
<connection>scm:git:https://gitbox.apache.org/repos/asf/juneau.git</connection>
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/juneau.git</developerConnection>
<url>https://github.com/apache/juneau</url>
<tag>juneau-9.2.0-RC3</tag>
</scm>
<issueManagement>
<system>Jira</system>
<url>https://issues.apache.org/jira/browse/JUNEAU</url>
</issueManagement>
<mailingLists>
<mailingList>
<name>Apache Juneau Developers</name>
<post>dev@juneau.apache.org</post>
<subscribe>list-subscribe@juneau.apache.org</subscribe>
<unsubscribe>list-unsubscribe@juneau.apache.org</unsubscribe>
<archive>https://lists.apache.org/list.html?dev@juneau.apache.org</archive>
</mailingList>
</mailingLists>
<developers>
<developer>
<id>johnadament</id>
<name>John D. Ament</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>sblackmon</id>
<name>Steve Blackmon</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>clr</id>
<name>Craig L Russell</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>stain</id>
<name>Stian Soiland-Reyes</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>jochen</id>
<name>Jochen Wiedmann</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>jamesbognar</id>
<name>James Bognar</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>dmg</id>
<name>David M Goddard</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>phaumer</id>
<name>Peter Haumer</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>yidonguk</id>
<name>Raphi D Lee</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>shalithasuranga</id>
<name>Shalitha Suranga</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>marcelosouzav</id>
<name>Marcelo Vieira</name>
<roles><role>PMC</role></roles>
</developer>
<developer>
<id>akayeshmantha</id>
<name>Ayeshmantha Perera</name>
<roles><role>PMC</role></roles>
</developer>
</developers>
</project>