diff --git a/Jenkinsfile b/Jenkinsfile
index d35283582..6c8efef0e 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,4 +1,22 @@
#!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 none
diff --git a/plugins/convention/README.md b/plugins/convention/README.md
index b9a6a7c19..68aee4c80 100644
--- a/plugins/convention/README.md
+++ b/plugins/convention/README.md
@@ -4,3 +4,47 @@ You will find more details in [documentation](https://struts.apache.org/plugins/
## Installation
Just drop this plugin JAR into `WEB-INF/lib` folder or add it as a Maven dependency.
+
+## Design
+
+### Action with no annotations (all the default handlings)
+
+Action name is class name.
+
+Action package is based on the either any Namespace annotations on the class or Java package the
+action class is defined in or the Java package name and the root Java package, which is determined
+based on the package locators or the action package list. In either case, a root package is
+identified and the namespace is the packages below the root up to and including the package that
+contains the action class.
+
+Action method is execute in all cases.
+
+Results are built first from the Result annotations at the class level. Next, they are built from
+the resources available in the web application and in the classpath based on the result location,
+namespace of the action and action name (not anything to do with the code element names). Results
+are found for common result codes including, success, error, input, failure, etc. If a specific
+result doesn't exist using the result code then just the action namespace and action name are used to
+locate results. If there are still no results found, than a redirect is added back to the index
+action for the namespace, if one exists.
+
+### Action with Action(s) annotations
+
+If the annotation is located on any method other than execute, than the action configuration built
+from the annotation is in addition to the action configuration built using the default. Unless there
+is an annotation that contains no value, in which case, the method that annotation is defined for
+becomes the default action method. If the annotation is defined on the execute method, regardless of
+the value of the annotation, no default configuration is built for the class.
+
+If multiple annotations have no value, an error should occur.
+If multiple annotations have the same value, an error should occur.
+
+Action name is taken from the annotation value. If the value is empty, the default action name
+is used.
+
+Action package is taken from the annotation value. If the annotation value doesn't start with a slash
+character, the default action namespace is used.
+
+Action method is always the method that the annotation is defined on.
+Results are built first from the array of Results on the Action annotation. Next, they are built
+from the class level Result annotations. Lastly, all default results are created. All Results already
+created during this process should not be overridden later in the process.
diff --git a/plugins/convention/design.txt b/plugins/convention/design.txt
deleted file mode 100644
index 397956e45..000000000
--- a/plugins/convention/design.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-Design
-
-Action with no annotations (all the default handlings)
---------------------------
-
-Action name is class name.
-Action package is based on the either any Namespace annotations on the class or Java package the
- action class is defined in or the Java package name and the root Java package, which is determined
- based on the package locators or the action package list. In either case, a root package is
- identified and the namespace is the packages below the root up to and including the package that
- contains the action class.
-Action method is execute in all cases.
-Results are built first from the Result annotations at the class level. Next, they are built from
- the resources available in the web application and in the classpath based on the result location,
- namespace of the action and action name (not anything to do with the code element names). Results
- are found for common result codes including, success, error, input, failure, etc. If a specific
- result doesn't exist using the result code then just the action namespace and action name are used to
- locate results. If there are still no results found, than a redirect is added back to the index
- action for the namespace, if one exists.
-
-Action with Action(s) annotations
----------------------------------
-
-If the annotation is located on any method other than execute, than the action configuration built
- from the annotation is in addition to the action configuration built using the default. Unless there
- is an annotation that contains no value, in which case, the method that annotation is defined for
- becomes the default action method. If the annotation is defined on the execute method, regardless of
- the value of the annotation, no default configuration is built for the class.
-If multiple annotations have no value, an error should occur.
-If multiple annotations have the same value, an error should occur.
-
-Action name is taken from the annotation value. If the value is empty, the default action name
- is used.
-Action package is taken from the annotation value. If the annotation value doesn't start with a slash
- character, the default action namespace is used.
-Action method is always the method that the annotation is defined on.
-Results are built first from the array of Results on the Action annotation. Next, they are built
- from the class level Result annotations. Lastly, all default results are created. All Results already
- created during this process should not be overridden later in the process.
diff --git a/pom.xml b/pom.xml
index c1a28418f..f6fd84a4a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -310,41 +310,32 @@
org.apache.rat
apache-rat-plugin
- 0.15
+ 0.17
- true
- true
- true
- false
-
-
-
-
-
-
-
- pom.xml
- src/**
-
-
- Jenkinsfile
- src/main/groovy/Jenkinsfile.gdsl
- src/main/resources/org/apache/struts2/static/domTT.js
+ ALL
+
+ CLAUDE.md
+ CODEOWNERS
+ SECURITY.md
+ **/README.md
+ src/main/resources/*-LICENSE.txt
src/site/resources/tags/**/*.html
- src/main/resources/*LICENSE.txt
src/test/resources/**/*.txt
+ src/main/resources/org/apache/struts2/static/domTT.js
src/main/webapp/**/*.css
src/main/webapp/**/*.map
src/main/webapp/**/*.js
src/main/webapp/**/*.svg
src/main/webapp/**/*.txt
- src/main/resources/**/docs-urls.txt
+ **/src/main/resources/**/docs-urls.txt
src/etc/header.txt
src/main/resources/static/css/**/*.css
src/main/resources/static/js/**/*.js
- src/main/resources/docs.cfg
+ **/src/main/resources/docs.cfg
src/main/webapp/fonts/**/*
-
+ thoughts/**/*.md
+ test-output/**
+
diff --git a/src/main/groovy/Jenkinsfile.gdsl b/src/main/groovy/Jenkinsfile.gdsl
index 005f7b155..210bb1e41 100644
--- a/src/main/groovy/Jenkinsfile.gdsl
+++ b/src/main/groovy/Jenkinsfile.gdsl
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
//The global script scope
def ctx = context(scope: scriptScope())