diff --git a/.asf.yaml b/.asf.yaml
index 9420e0abc70..33013a8d0da 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -15,5 +15,68 @@
# limitations under the License.
#
+github:
+ description: "Apache Karaf, the enterprise modulith runtime"
+ homepage: https://karaf.apache.org
+ labels:
+ - apache
+ - karaf
+ - osgi
+ - modulith
+ - runtime
+
+ enabled_merge_buttons:
+ merge: false
+ rebase: true
+ squash: true
+
+ del_branch_on_merge: true
+
+ protected_branches:
+ main:
+ required_pull_request_reviews:
+ require_code_owner_reviews: false
+ required_approving_review_count: 0
+ required_linear_history: true
+ required_status_checks:
+ strict: false
+ contexts:
+ - "build (ubuntu-24.04)"
+ - "build (windows-latest)"
+ - "build (macos-latest)"
+ - "test (ubuntu-24.04)"
+ - "test (windows-latest)"
+ - "test (macos-latest)"
+ karaf-4.4.x:
+ required_pull_request_reviews:
+ require_code_owner_reviews: false
+ required_approving_review_count: 0
+ required_linear_history: true
+ required_status_checks:
+ strict: false
+ contexts:
+ - "build (ubuntu-24.04)"
+ - "build (windows-latest)"
+ - "build (macos-latest)"
+ - "test (ubuntu-24.04)"
+ - "test (windows-latest)"
+ - "test (macos-latest)"
+
+ features:
+ wiki: false
+ issues: true
+ projects: true
+ discussions: true
+
+ dependabot_alerts: true
+ dependabot_updates: true
+
+ autolink_jira:
+ - KARAF
+
notifications:
+ commits: commits@karaf.apache.org
+ issues: issues@karaf.apache.org
+ discussions: dev@karaf.apache.org
pullrequests: commits@karaf.apache.org
+ jira_options: link label
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000000..686695e99a8
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,36 @@
+#
+# 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.
+#
+
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ ignore:
+ - dependency-name: "*"
+ update-types: ["version-update:semver-major"]
+ - package-ecosystem: "maven"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ open-pull-requests-limit: 50
+ ignore:
+ - dependency-name: "*"
+ update-types: ["version-update:semver-major"]
diff --git a/.github/workflows/ci-test-results.yml b/.github/workflows/ci-test-results.yml
new file mode 100644
index 00000000000..76622a521e2
--- /dev/null
+++ b/.github/workflows/ci-test-results.yml
@@ -0,0 +1,66 @@
+#
+# 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.
+#
+
+name: CI Test Results
+
+on:
+ workflow_run:
+ workflows: ["CI"]
+ types:
+ - completed
+
+permissions:
+ contents: read
+ checks: write
+ pull-requests: write
+ actions: read
+
+jobs:
+ test-results:
+ name: Publish Test Results
+ runs-on: ubuntu-24.04
+ if: github.event.workflow_run.conclusion != 'skipped'
+
+ steps:
+ - name: Download Test Results
+ uses: dawidd6/action-download-artifact@v24
+ with:
+ run_id: ${{ github.event.workflow_run.id }}
+ name: test-results-.*
+ name_is_regexp: true
+ path: artifacts
+
+ - name: Download Event File
+ uses: dawidd6/action-download-artifact@v24
+ with:
+ run_id: ${{ github.event.workflow_run.id }}
+ name: event-file-.*
+ name_is_regexp: true
+ path: event
+
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action@v2
+ with:
+ commit: ${{ github.event.workflow_run.head_sha }}
+ event_file: event/event.json
+ event_name: ${{ github.event.workflow_run.event }}
+ large_files: true
+ report_individual_runs: true
+ report_suite_logs: error
+ files: 'artifacts/**/*.xml'
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000000..a18d5dac0e3
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,102 @@
+#
+# 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.
+#
+
+name: CI
+
+on:
+ push:
+ branches: [ "karaf-4.4.x" ]
+ pull_request:
+ branches: [ "karaf-4.4.x" ]
+
+jobs:
+ build:
+ name: build (${{ matrix.os }})
+
+ permissions:
+ contents: read
+
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ ubuntu-24.04, windows-latest, macos-latest ]
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v7
+ - name: Set up JDK 11
+ uses: actions/setup-java@v6
+ with:
+ java-version: '11'
+ distribution: 'temurin'
+ cache: 'maven'
+ - name: Build
+ run: mvn -U -B -e clean install -Prat -DskipTests "-Dinvoker.skip=true"
+ - name: Save Maven Local Repository
+ uses: actions/upload-artifact@v7
+ with:
+ name: maven-local-repo-${{ matrix.os }}
+ path: ~/.m2/repository
+ retention-days: 1
+
+ test:
+ name: test (${{ matrix.os }})
+ needs: build
+
+ permissions:
+ contents: read
+
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ ubuntu-24.04, windows-latest, macos-latest ]
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v7
+ - name: Set up JDK 11
+ uses: actions/setup-java@v6
+ with:
+ java-version: '11'
+ distribution: 'temurin'
+ cache: 'maven'
+ - name: Restore Maven Local Repository
+ uses: actions/download-artifact@v8
+ with:
+ name: maven-local-repo-${{ matrix.os }}
+ path: ~/.m2/repository
+ - name: Test
+ run: mvn -B -e install -Ptest ${{ runner.os == 'Windows' && '-pl !itests/test' || '' }}
+ timeout-minutes: 180
+ - name: Upload Test Results
+ if: always()
+ uses: actions/upload-artifact@v7
+ with:
+ name: test-results-${{ matrix.os }}
+ path: '**/target/surefire-reports/*.xml'
+ - name: Upload Event File
+ if: always()
+ uses: actions/upload-artifact@v7
+ with:
+ name: event-file-${{ matrix.os }}
+ path: ${{ github.event_path }}
diff --git a/.gitignore b/.gitignore
index 18a15299806..f28388e9274 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,4 @@ atlassian-ide-plugin.xml
bin
dependency-reduced-pom.xml
.apt_generated_tests
-
+.vscode
diff --git a/.mvn/README b/.mvn/README
new file mode 100644
index 00000000000..bd829fe1321
--- /dev/null
+++ b/.mvn/README
@@ -0,0 +1 @@
+required by Maven 4 to detect root dir; adding root=true to pom is not compatible with Maven 3
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 76deecb42d8..00000000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,200 +0,0 @@
-#!groovy
-
-/*
- *
- * 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.
- *
- */
-
-pipeline {
-
- agent {
- node {
- label 'ubuntu'
- }
- }
-
- environment {
- // ... setup any environment variables ...
- MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository'
- MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
- }
-
- tools {
- // ... tell Jenkins what java version, maven version or other tools are required ...
- maven 'maven_3_latest'
- jdk 'jdk_11_latest'
- }
-
- options {
- // Configure an overall timeout for the build of one hour.
- timeout(time: 5, unit: 'HOURS')
- // When we have test-fails e.g. we don't need to run the remaining steps
- skipStagesAfterUnstable()
- buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
- }
-
- stages {
- stage('Initialization') {
- steps {
- echo 'Building branch ' + env.BRANCH_NAME
- echo 'Using PATH ' + env.PATH
- }
- }
-
- stage('Cleanup') {
- steps {
- echo 'Cleaning up the workspace'
- deleteDir()
- }
- }
-
- stage('Checkout') {
- steps {
- echo 'Checking out branch ' + env.BRANCH_NAME
- checkout scm
- }
- }
-
- stage('Build JDK 20') {
- tools {
- jdk "jdk_20_latest"
- }
- steps {
- echo 'Building JDK 20'
- sh 'java -version'
- sh 'mvn -version'
- sh 'mvn -U -B -e clean install -DskipTests'
- }
- }
-
- stage('Build JDK 17') {
- tools {
- jdk "jdk_17_latest"
- }
- steps {
- echo 'Building JDK 17'
- sh 'java -version'
- sh 'mvn -version'
- sh 'mvn -U -B -e clean install -DskipTests'
- }
- }
-
- stage('Build JDK 11') {
- tools {
- jdk "jdk_11_latest"
- }
- steps {
- echo 'Building JDK 11'
- sh 'java -version'
- sh 'mvn -version'
- sh 'mvn -U -B -e clean install -DskipTests -Dinvoker.skip=true -Prat'
- }
- }
-
- stage('Tests') {
- steps {
- echo 'Running tests'
- sh 'mvn -B -e -fae test -Ptest'
- }
- post {
- always {
- junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
- junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
- }
- }
- }
-
- // stage('Code Quality') {
- // steps {
- // echo 'Checking Code Quality on SonarCloud'
- // withCredentials([string(credentialsId: 'sonarcloud-key-apache-karaf', variable: 'SONAR_TOKEN')]) {
- // sh 'mvn sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache -Dsonar.projectKey=apache_karaf -Dsonar.branch.name=${BRANCH_NAME} -Dsonar.login=${SONAR_TOKEN}'
- // }
- // }
- //}
-
- stage('Deploy') {
- when {
- expression {
- env.BRANCH_NAME ==~ /(karaf-4.3.x|main)/
- }
- }
- steps {
- echo 'Deploying'
- sh 'mvn -B -e deploy -Pdeploy -DskipTests'
- }
- }
- }
-
- // Do any post build stuff ... such as sending emails depending on the overall build result.
- post {
- // If this build failed, send an email to the list.
- failure {
- script {
- if(env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") {
- emailext(
- subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
- body: """
-BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Check console output at "${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]"
-""",
- to: "commits@karaf.apache.org",
- recipientProviders: [[$class: 'DevelopersRecipientProvider']]
- )
- }
- }
- }
-
- // If this build didn't fail, but there were failing tests, send an email to the list.
- unstable {
- script {
- if(env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") {
- emailext(
- subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
- body: """
-BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Check console output at "${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]"
-""",
- to: "commits@karaf.apache.org",
- recipientProviders: [[$class: 'DevelopersRecipientProvider']]
- )
- }
- }
- }
-
- // Send an email, if the last build was not successful and this one is.
- success {
- // Cleanup the build directory if the build was successful
- // (in this cae we probably don't have to do any post-build analysis)
- deleteDir()
- script {
- if ((env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
- emailext (
- subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
- body: """
-BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Is back to normal.
-""",
- to: "commits@karaf.apache.org",
- recipientProviders: [[$class: 'DevelopersRecipientProvider']]
- )
- }
- }
- }
- }
-
-}
diff --git a/LICENSE b/LICENSE
index b36a53db890..f3344e31003 100644
--- a/LICENSE
+++ b/LICENSE
@@ -201,275 +201,12 @@
See the License for the specific language governing permissions and
limitations under the License.
-For asm:
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-
-For equinox:
-Eclipse Public License - v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT").
-ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-
-i) changes to the Program, and
-
-ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
-A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
-acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
-modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
-derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale
-of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform,
-distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code
-and object code form.
-
-b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer
-the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to
-the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
-addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall
-not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
-assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
-based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights
-needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program,
-it is Recipient's responsibility to acquire that license before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any,
-to grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this Agreement; and
-
-b) its license agreement:
-
-i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
-fitness for a particular purpose;
-
-ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
-other party; and
-
-iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain
-it in a reasonable manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-
-b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably
-allows subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering,
-such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor
-("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused
-by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a
-commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any
-actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly
-notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and
-cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
-then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
-related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
-Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
-those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
-determining the appropriateness of using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption
-of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
-GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity
-or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto,
-such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes
-such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of
-such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement
-and any licenses granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the
-Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right
-to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse
-Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new
-version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may
-always be distributed subject to the version of the Agreement under which it was received. In addition, after a new
-version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions)
-under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
-of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the
-cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
-
-For Java Service Wrapper:
-Copyright (c) 1999, 2006 Tanuki Software, Inc.
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of the Java Service Wrapper and associated
-documentation files (the "Software"), to deal in the Software
-without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sub-license,
-and/or sell copies of the Software, and to permit persons to
-whom the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-Portions of the Software have been derived from source code
-developed by Silver Egg Technology under the following license:
-
-BEGIN Silver Egg Techology License -----------------------------------
-
- Copyright (c) 2001 Silver Egg Technology
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sub-license, and/or
- sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
-
-END Silver Egg Techology License -------------------------------------
-
-For slf4j
-Copyright (c) 2004-2011 QOS.ch
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
+Codehaus Jackson (https://github.com/codehaus/jackson)
+* audit/src/main/java/org/apache/karaf/audit/util/NumberOutput.java
+
+Apache Logging Log4j (https://logging.apache.org/log4j)
+* log/src/main/java/org/apache/karaf/log/core/internal/layout/DateTimeDateFormat.java
+* log/src/main/java/org/apache/karaf/log/core/internal/layout/FormattingInfo.java
+* log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
+* log/src/main/java/org/apache/karaf/log/core/internal/layout/AbsoluteTimeDateFormat.java
+* log/src/main/java/org/apache/karaf/log/core/internal/layout/ISO8601DateFormat.java
diff --git a/NOTICE b/NOTICE
index 535ac654677..4489adba4d0 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,65 +1,5 @@
Apache Karaf
-Copyright 2010-2023 The Apache Software Foundation
-
-I. Included Software
+Copyright 2025 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
-Licensed under the Apache License 2.0.
-
-This product includes software developed at
-The OSGi Alliance (http://www.osgi.org/).
-Copyright (c) OSGi Alliance (2000, 2010).
-Licensed under the Apache License 2.0.
-
-This product includes software developed at
-OW2 (http://www.ow2.org/).
-Licensed under the BSD License.
-
-This product includes software developed at
-OPS4J (http://www.ops4j.org/).
-Licensed under the Apache License 2.0.
-
-This product includes software developed at
-Eclipse Foundation (http://www.eclipse.org/).
-Licensed under the EPL.
-
-This product includes software written by
-Antony Lesuisse.
-Licensed under Public Domain.
-
-II. Used Software
-
-This product uses software developed at
-FUSE Source (http://www.fusesource.org/).
-Licensed under the Apache License 2.0.
-
-This product uses software developed at
-AOP Alliance (http://aopalliance.sourceforge.net/).
-Licensed under the Public Domain.
-
-This product uses software developed at
-Tanuki Software (http://www.tanukisoftware.com/).
-Licensed under the Apache License 2.0.
-
-This product uses software developed at
-Jasypt (http://jasypt.sourceforge.net/).
-Licensed under the Apache License 2.0.
-
-This product uses software developed at
-JLine (https://github.com/jline/).
-Licensed under the BSD License.
-
-This product uses software developed at
-SLF4J (http://www.slf4j.org/).
-Licensed under the MIT License.
-
-This product uses software developed at
-SpringSource (http://www.springsource.org/).
-Licensed under the Apache License 2.0.
-
-III. License Summary
-- Apache License 2.0
-- BSD License
-- EPL License
-- MIT License
diff --git a/README.md b/README.md
index b3df6551bcf..003bed90f62 100644
--- a/README.md
+++ b/README.md
@@ -49,9 +49,6 @@ It provides turnkey features that you can directly leverage without effort, pack
For an Apache Karaf source distribution, please read [BUILDING.md](https://github.com/apache/karaf/blob/main/BUILDING.md) for instructions on building Apache Karaf.
-For an Apache Karaf binary distribution, please read [RELEASE-NOTES.md](https://github.com/apache/karaf/blob/main/RELEASE-NOTES.md) for installation instructions and list of supported
-and unsupported features.
-
The PDF manual is the right place to find any information about Karaf.
The [examples](https://github.com/apache/karaf/tree/main/examples) provide a bunch of turnkey minimal applications that you can deploy in Apache Karaf and extend/template as you want.
@@ -67,7 +64,7 @@ To get involved in Apache Karaf:
* [Subscribe](mailto:user-subscribe@karaf.apache.org) or [mail](mailto:user@karaf.apache.org) the [user@karaf.apache.org](https://mail-archives.apache.org/mod_mbox/karaf-user/) list.
* [Subscribe](mailto:dev-subscribe@karaf.apache.org) or [mail](mailto:dev@karaf.apache.org) the [dev@karaf.apache.org](https://mail-archives.apache.org/mod_mbox/karaf-dev/) list.
-* Report issues on [JIRA](https://issues.apache.org/jira/browse/KARAF).
+* Report issues on [GitHub](https://github.com/apache/karaf/issues).
We also have a [contributor's guide](https://karaf.apache.org/community.html#contribute).
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
deleted file mode 100644
index ca7227a0bea..00000000000
--- a/RELEASE-NOTES.md
+++ /dev/null
@@ -1,1877 +0,0 @@
-
-
-## Apache Karaf 4.4.4
-
-This is a maintenance release on the 4.4.x series. It includes a bunch of dependency updates and fixes.
-
-### ChangeLog
-
-#### Bug
- * [KARAF-6074] - Race condition between the FeaturesService and FeatureDeploymentListener
- * [KARAF-7669] - Fix --patch-module on Instance startup
- * [KARAF-7678] - ShellTable erroneously clips out text from multi-line column contents
- * [KARAF-7690] - jdk.net package is not exposed
- * [KARAF-7710] - Fix CVE-2023-33201 in BouncyCastle
- * [KARAF-7711] - Fix CVE-2023-24998 in FileUpload
- * [KARAF-7712] - Fix CVE-2023-33008 in Johnzon
-
-#### Improvement
- * [KARAF-5421] - Better error while installing non OSGi bundles
- * [KARAF-6538] - Add exec:groovy command
- * [KARAF-7637] - remove timestamp from generated service metadata
- * [KARAF-7677] - Log the offending bundle if a bundle refresh occurs during assembly
- * [KARAF-7708] - Test and example of JSON configuration
- * [KARAF-7733] - Upgrade to pax-jms 1.1.3
- * [KARAF-7736] - Service PID for a JSON configuration
- * [KARAF-7746] - Improve JVM version check in the shell script
-
-#### Task
- * [KARAF-7681] - Add JDK20 packages in etc/jre.properties
- * [KARAF-7696] - Add support for JDK 20
-
-#### Dependency upgrade
- * [KARAF-7693] - Upgrade to Spring 5.3.29
- * [KARAF-7698] - Upgrade SSHD to 2.10.0
- * [KARAF-7699] - Upgrade commons-io to 2.13.0
- * [KARAF-7701] - Upgrade XBean to 4.23
- * [KARAF-7702] - Upgrade commons-compress to 1.23.0
- * [KARAF-7709] - Upgrade to org.eclipse.equinox.region 1.5.300
- * [KARAF-7714] - Upgrade to Pax Logging 2.2.3
- * [KARAF-7715] - Upgrade to easymock 5.2.0
- * [KARAF-7716] - Upgrade to JNA 5.13.0
- * [KARAF-7717] - Upgrade to Felix Framework Security 2.8.4
- * [KARAF-7719] - Upgrade to Felix SCR 2.2.6
- * [KARAF-7720] - Upgrade to Felix WebConsole 4.8.10
- * [KARAF-7724] - Upgrade to ASM 9.5
- * [KARAF-7725] - Upgrade to org.osgi.service.component* 1.5.1
- * [KARAF-7726] - Upgrade to org.osgi.service.jdbc 1.1.0, Pax Transx 0.5.4, Pax JDBC 1.5.6
- * [KARAF-7727] - Upgrade to org.osgi.util.promise 1.3.0
- * [KARAF-7729] - Upgrade to Aries SpiFly 1.3.6
- * [KARAF-7730] - Upgrade to maven-bundle-plugin 5.1.9
- * [KARAF-7731] - Upgrade to Felix ConfigAdmin plugin interpolation 1.2.8
- * [KARAF-7740] - Upgrade pax-url to 2.6.14
- * [KARAF-7743] - Upgrade to commons-lang 3.13.0
- * [KARAF-7744] - Upgrade to org.eclipse.equinox.coordinator 1.5.200
- * [KARAF-7745] - Upgrade to Pax Web 8.0.22 & Jetty 9.4.52.v20230823
- * [KARAF-7748] - Upgrade to JAXB 2.3.8 and use jaxb-bom
-
-#### Documentation
- * [KARAF-7670] - Some example READMEs use old versions
-
-## Apache Karaf 4.4.3
-
-This is a maintenance release on the 4.4.x series. It includes a bunch of dependency updates and important fixes.
-
-### ChangeLog
-
-#### Bug
- * [KARAF-6697] - karaf-maven-plugin verify goal leaks threads
- * [KARAF-7443] - JMX: rmiRegistryHost=0.0.0.0 Runtime IO exception: no such object in table
- * [KARAF-7583] - shell:alias command not found in Apache Karaf 4.4.1
- * [KARAF-7605] - Karaf BoM causes import of org.osgi.service.log to have lower bound 1.5.0 but only version 1.4.0 is available
- * [KARAF-7607] - bin/client fails with SSHD IllegalArgumentException
- * [KARAF-7608] - Override config option by environment variable not possible
- * [KARAF-7610] - JMX: rmiRegistryHost=0.0.0.0 not working
-
-#### New Feature
- * [KARAF-1717] - Add markdown format support in the command helper plugin
- * [KARAF-7068] - Add instance:package command
-
-#### Improvement
- * [KARAF-7601] - Remove two default ssh algorithms no longer available
-
-#### Wish
- * [KARAF-7624] - Enable debug port on all interface
-
-#### Dependency upgrade
- * [KARAF-7411] - Upgrade to easymock 5.0.1
- * [KARAF-7455] - Upgrade to Aries JAX-RS whiteboard 2.0.2
- * [KARAF-7599] - Upgrade to jackson 2.14.1
- * [KARAF-7600] - Upgrade to Pax JDBC 1.5.5
- * [KARAF-7609] - Upgrade to sshd 2.9.2
- * [KARAF-7611] - Upgrade to commons-compress 1.22
- * [KARAF-7613] - Upgrade to Felix ConfigAdmin 1.9.26
- * [KARAF-7615] - Upgrade to Felix WebConsole DS plugin 2.2.0
- * [KARAF-7616] - Upgrade to maven-dependency-tree 3.2.1
- * [KARAF-7617] - Upgrade to xbean 4.22
- * [KARAF-7619] - Upgrade to narayana 5.13.1.Final
- * [KARAF-7620] - Upgrade to Apache POM 28
- * [KARAF-7621] - Upgrade to eclipselink 2.7.11
- * [KARAF-7622] - Upgrade to Pax Logging 2.2.0
- * [KARAF-7625] - Upgrade to CXF 3.5.5
- * [KARAF-7628] - Upgrade to Apache POM 29
- * [KARAF-7630] - Upgrade to Pax Web 8.0.15
-
-#### Documentation
- * [KARAF-7626] - Websocket example references the command http:list instead of web:servlet-list
-
-## Apache Karaf 4.4.2
-
-This is a maintenance release on the 4.4.x series. It includes a bunch of dependency updates and important fixes and new features.
-
-### ChangeLog
-
-#### Sub-task
- * [KARAF-7554] - Add feature:status command
- * [KARAF-7567] - Add GraphQL example
-
-#### Bug
- * [KARAF-6769] - censor parameter does not work when using alias.
- * [KARAF-7362] - Override of shellPort by environment variable sometime failed during clean start
- * [KARAF-7522] - Duplicate feature name and version cause stack overflow errors
- * [KARAF-7535] - Mis-aligned artifacts for el-api
- * [KARAF-7538] - Assembly Mojo parameter translatedUrls is unusable
- * [KARAF-7550] - MBeanInvocationHandler should throw the cause of InvocationTargetException, not ITE itself
- * [KARAF-7556] - pax-jdbc has mismatched pax-transx feature version
- * [KARAF-7580] - StringIndexOutOfBoundsException in ShellTable
-
-#### New Feature
- * [KARAF-1381] - Use a history file per instance when possible
- * [KARAF-7551] - Extend KarService.install() with noAutoRefreshBundles as Parameter
- * [KARAF-7571] - Create feature for Spring Security 5.7.3
-
-#### Improvement
- * [KARAF-4542] - Add an option to feature:list to list features provided by a given repository
- * [KARAF-5194] - Add feature status to feature:version-list command
- * [KARAF-6110] - Add an option to shutdown Karaf if a boot features fails or repositories not found
- * [KARAF-6319] - Add
The target file is derived from caller-controlled input: a {@code felix.fileinstall.filename} + * entry in the property map can point to an arbitrary path, and a PID (or factory alias) containing + * {@code ..} segments escapes {@code ${karaf.etc}} through {@link #generateConfigFilename}. Without + * this check a user allowed to update configurations could overwrite files reserved to more + * privileged users (e.g. {@code etc/users.properties} or the command/JMX ACL files).
+ */ + private static void checkConfigFileLocation(File file) throws IOException { + PathUtils.checkWithin(new File(System.getProperty("karaf.etc")), file); + } + /* (non-Javadoc) * @see org.apache.karaf.shell.config.impl.ConfigRepository#delete(java.lang.String) */ @@ -165,6 +180,12 @@ public TypedProperties getConfig(String pid) throws IOException, InvalidSyntaxEx } if (file != null && file.exists()) { tp = load(file); + + Object fileInstallFileName = props.get(FILEINSTALL_FILE_NAME); + if (fileInstallFileName != null && !"".equals(fileInstallFileName)) { + tp.put(FILEINSTALL_FILE_NAME, fileInstallFileName); + } + } else { for (Enumeration