diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml
index 99dfdbb071..ee30f0b50b 100644
--- a/modules/swagger-core/pom.xml
+++ b/modules/swagger-core/pom.xml
@@ -141,9 +141,9 @@
commons-io
- javax.ws.rs
- jsr311-api
- 1.1.1
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ ${jakarta-ws-rs-api-version}
test
@@ -156,6 +156,7 @@
2.0.2
+ 2.1.6
0.60
0.0
3
diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java
index d78e6ef886..768f3fa8c5 100644
--- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java
+++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java
@@ -8,7 +8,6 @@
import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
-import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml
index a66e22d1f9..9436335c02 100644
--- a/modules/swagger-jaxrs2/pom.xml
+++ b/modules/swagger-jaxrs2/pom.xml
@@ -141,7 +141,7 @@
org.javassist
javassist
- 3.22.0-GA
+ 3.25.0-GA
commons-io
diff --git a/modules/swagger-project-jakarta/.gitignore b/modules/swagger-project-jakarta/.gitignore
new file mode 100644
index 0000000000..d5ece13ddc
--- /dev/null
+++ b/modules/swagger-project-jakarta/.gitignore
@@ -0,0 +1,18 @@
+build/
+lib/*.jar
+target
+.idea
+.idea_modules
+.settings
+.project
+.classpath
+.cache
+atlassian-ide-plugin.xml
+*.iml
+.java-version
+sonar-project.properties
+test-output/
+*.pyc
+**/transformed/*.jar
+**/transformed/*.test-jar
+**/transformed/*.maven-plugin
diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml
new file mode 100644
index 0000000000..191c98c88c
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml
@@ -0,0 +1,20 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-annotations-jakarta
+ swagger-annotations-jakarta
+ swagger-annotations-jakarta
+
+
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml
new file mode 100644
index 0000000000..87b9177737
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml
@@ -0,0 +1,82 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-core-jakarta
+ swagger-core-jakarta
+ swagger-core-jakarta
+
+
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.slf4j
+ slf4j-api
+
+
+ ch.qos.logback
+ logback-classic
+ provided
+
+
+ ch.qos.logback
+ logback-core
+ provided
+
+
+ commons-io
+ commons-io
+
+
+
+
+ io.swagger.core.v3
+ swagger-annotations-jakarta
+ ${project.parent.version}
+
+
+ io.swagger.core.v3
+ swagger-models-jakarta
+ ${project.parent.version}
+
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml
new file mode 100644
index 0000000000..28ef192792
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml
@@ -0,0 +1,37 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-integration-jakarta
+ swagger-integration-jakarta
+ swagger-integration-jakarta
+
+
+
+
+
+ io.github.classgraph
+ classgraph
+
+
+
+ io.swagger.core.v3
+ swagger-core-jakarta
+ ${project.version}
+
+
+ io.swagger.core.v3
+ swagger-models-jakarta
+ ${project.version}
+
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml
new file mode 100644
index 0000000000..bf71ef333e
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml
@@ -0,0 +1,83 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-jaxrs2-jakarta
+ swagger-jaxrs2-jakarta
+ swagger-jaxrs2-jakarta
+
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ provided
+
+
+ ch.qos.logback
+ logback-core
+ provided
+
+
+ io.github.classgraph
+ classgraph
+
+
+ org.javassist
+ javassist
+ 3.25.0-GA
+
+
+ commons-io
+ commons-io
+
+
+
+ io.swagger.core.v3
+ swagger-models-jakarta
+ ${project.version}
+
+
+ io.swagger.core.v3
+ swagger-annotations-jakarta
+ ${project.version}
+
+
+ io.swagger.core.v3
+ swagger-integration-jakarta
+ ${project.version}
+
+
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ jakarta
+ ${jackson-version}
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml
new file mode 100644
index 0000000000..7de6bd82e7
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml
@@ -0,0 +1,49 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-jaxrs2-servlet-initializer-jakarta
+ swagger-jaxrs2-servlet-initializer-jakarta
+ swagger-jaxrs2-servlet-initializer-jakarta
+
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ provided
+
+
+ ch.qos.logback
+ logback-core
+ provided
+
+
+
+ io.swagger.core.v3
+ swagger-jaxrs2-jakarta
+ ${project.version}
+ provided
+
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml
new file mode 100644
index 0000000000..4a57e3fe8d
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml
@@ -0,0 +1,49 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-jaxrs2-servlet-initializer-v2-jakarta
+ swagger-jaxrs2-servlet-initializer-v2-jakarta
+ swagger-jaxrs2-servlet-initializer-v2-jakarta
+
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ provided
+
+
+ ch.qos.logback
+ logback-core
+ provided
+
+
+
+ io.swagger.core.v3
+ swagger-jaxrs2-jakarta
+ ${project.version}
+ provided
+
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml
new file mode 100644
index 0000000000..db83620e37
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml
@@ -0,0 +1,180 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-maven-plugin-jakarta
+ maven-plugin
+ swagger-maven-plugin-jakarta
+ swagger-maven-plugin-jakarta
+
+
+
+
+ com.coderplus.maven.plugins
+ copy-rename-maven-plugin
+ 1.0.1
+
+
+ copy-file
+ compile
+
+ rename
+
+
+ true
+ true
+ ${project.basedir}/transformed/${project.artifactId}-${project.version}.maven-plugin
+ ${project.basedir}/transformed/${project.artifactId}-${project.version}.jar
+
+
+
+
+
+ maven-resources-plugin
+ 3.2.0
+
+
+ copy-resources
+ package
+
+ copy-resources
+
+
+ ${project.build.directory}
+ true
+
+
+ transformed
+ false
+
+ ${project.artifactId}-${project.version}.jar
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+
+ package
+
+ java
+
+
+ io.swagger.v3.plugin.maven.jakarta.JakartaTransformer
+
+ ${project.build.directory}/${project.artifactId}-${project.version}.jar
+ ${project.build.directory}/transformertemp
+ ${jakarta.ws-version}
+ ${jakarta.activation-api-version}
+ ${jackson-version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-plugin-plugin
+ 3.6.0
+
+
+ true
+
+
+
+ mojo-descriptor
+
+ descriptor
+
+
+
+
+
+
+
+
+
+ org.apache.maven
+ maven-plugin-api
+ ${maven.version}
+ provided
+
+
+ org.codehaus.plexus
+ plexus-utils
+
+
+ org.codehaus.plexus
+ plexus-component-annotations
+
+
+ org.codehaus.plexus
+ plexus-classworlds
+
+
+
+
+ org.apache.maven
+ maven-core
+ ${maven.version}
+ provided
+
+
+ org.codehaus.plexus
+ plexus-utils
+
+
+
+
+ org.apache.maven.plugin-tools
+ maven-plugin-annotations
+ 3.6.0
+ provided
+
+
+ org.apache.maven
+ maven-artifact
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.7
+
+
+ org.codehaus.plexus
+ plexus-utils
+ 3.2.1
+
+
+ org.codehaus.plexus
+ plexus-component-annotations
+ 2.1.0
+
+
+
+ io.swagger.core.v3
+ swagger-jaxrs2-jakarta
+ ${project.version}
+
+
+
+
+
+ UTF-8
+ 3.6.3
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/src/main/java/io/swagger/v3/plugin/maven/jakarta/JakartaTransformer.java b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/src/main/java/io/swagger/v3/plugin/maven/jakarta/JakartaTransformer.java
new file mode 100644
index 0000000000..5646da3f09
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/src/main/java/io/swagger/v3/plugin/maven/jakarta/JakartaTransformer.java
@@ -0,0 +1,364 @@
+package io.swagger.v3.plugin.maven.jakarta;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.URI;
+import java.nio.file.CopyOption;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * Transforms swagger-maven-plugin jar file to be used with Jakarta namespace using artifactId swagger-maven-plugin-jakarta
+ *
+ */
+public class JakartaTransformer {
+
+
+ /*
+ * Substitution tokens + regex
+ */
+ private static Set files =
+ Stream.of(
+ // "META-INF/MANIFEST.MF",
+ "META-INF/maven/plugin.xml",
+ "META-INF/maven/io.swagger.core.v3/swagger-maven-plugin/plugin-help.xml",
+ // "META-INF/plexus/components.xml",
+ "META-INF/maven/io.swagger.core.v3/swagger-maven-plugin/pom.xml",
+ "META-INF/maven/io.swagger.core.v3/swagger-maven-plugin/pom.properties")
+ .collect(Collectors.toCollection(HashSet::new));
+
+ private static final String jakartaXmlBindDep = "\n" +
+ " jakarta.xml.bind\n" +
+ " jakarta.xml.bind-api\n" +
+ " VERSION\n" +
+ " \n";
+
+ private static final String jakartaXmlBindRegex = "^.*(.*jakarta\\.xml\\.bind((?!).)*).*$";
+
+ private static final String jakartaValidationDep = "\n" +
+ " jakarta.validation\n" +
+ " jakarta.validation-api\n" +
+ " VERSION\n" +
+ " \n";
+
+ private static final String jakartaValidationRegex = "^.*(.*jakarta\\.validation((?!).)*).*$";
+
+ private static final String jacksonJsonDep = "\n" +
+ " com.fasterxml.jackson.jaxrs\n" +
+ " jackson-jaxrs-json-provider\n" +
+ " jakarta\n" +
+ " VERSION\n" +
+ " \n" +
+ " \n" +
+ " jakarta.activation\n" +
+ " jakarta.activation-api\n" +
+ " \n" +
+ " \n" +
+ " jakarta.xml.bind\n" +
+ " jakarta.xml.bind-api\n" +
+ " \n" +
+ " \n" +
+ " ";
+
+ private static final String jacksonJsonRegex = "^.*(.*jackson\\-jaxrs\\-json((?!).)*).*$";
+
+ private static final String jacksonBaseDep = "\n" +
+ " com.fasterxml.jackson.jaxrs\n" +
+ " jackson-jaxrs-base\n" +
+ " jakarta\n" +
+ " VERSION\n" +
+ " ";
+
+ private static final String jacksonBaseRegex = "^.*(.*jackson\\-jaxrs\\-base((?!).)*).*$";
+
+ private static final String jacksonJaxbDep = "\n" +
+ " com.fasterxml.jackson.module\n" +
+ " jackson-module-jaxb-annotations\n" +
+ " jakarta\n" +
+ " VERSION\n" +
+ " \n" +
+ " \n" +
+ " jakarta.activation\n" +
+ " jakarta.activation-api\n" +
+ " \n" +
+ " \n" +
+ " jakarta.xml.bind\n" +
+ " jakarta.xml.bind-api\n" +
+ " \n" +
+ " \n" +
+ " ";
+
+ private static final String jacksonJaxbRegex = "^.*(.*jackson\\-module\\-jaxb((?!).)*).*$";
+
+ private static final String jakartaActivationDep = "\n" +
+ " jakarta.activation\n" +
+ " jakarta.activation-api\n" +
+ " VERSION\n" +
+ " ";
+
+ private static final String jakartaActivationRegex = "^.*(.*jakarta\\.activation((?!).)*).*$";
+
+ /**
+ *
+ * Extracts Jar into temp directory
+ *
+ */
+ private static void extract(String inPath, String outPath) throws Exception {
+
+ Path target = Paths.get(outPath);
+ Path source = Paths.get(inPath);
+
+ try (ZipInputStream zis = new ZipInputStream(new FileInputStream(source.toFile()))) {
+
+ // list files in zip
+ ZipEntry zipEntry = zis.getNextEntry();
+
+ while (zipEntry != null) {
+
+ boolean isDirectory = false;
+
+ if (zipEntry.getName().endsWith(File.separator)) {
+ isDirectory = true;
+ }
+
+ Path targetDirResolved = target.resolve(zipEntry.getName());
+
+ Path normalizePath = targetDirResolved.normalize();
+ if (!normalizePath.startsWith(target)) {
+ throw new IOException("Bad zip entry: " + zipEntry.getName());
+ }
+
+ Path newPath = normalizePath;
+
+ if (isDirectory) {
+ Files.createDirectories(newPath);
+ } else {
+ if (newPath.getParent() != null) {
+ if (Files.notExists(newPath.getParent())) {
+ Files.createDirectories(newPath.getParent());
+ }
+ }
+ Files.copy(zis, newPath, StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ zipEntry = zis.getNextEntry();
+
+ }
+ zis.closeEntry();
+
+ }
+ }
+
+ /**
+ *
+ * Compress temp directory back into Jar after transformed
+ *
+ */
+
+ public static void jar(Path sourcePath, String outJarPath) throws IOException {
+
+ URI uri = URI.create("jar:file:" + outJarPath);
+
+ Files.walkFileTree(sourcePath, new SimpleFileVisitor() {
+ @Override
+ public FileVisitResult visitFile(Path file,
+ BasicFileAttributes attributes) {
+
+ if (attributes.isSymbolicLink()) {
+ return FileVisitResult.CONTINUE;
+ }
+
+ Map env = new HashMap<>();
+ env.put("create", "true");
+
+ try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
+
+ Path targetFile = sourcePath.relativize(file);
+ Path pathInZipfile = zipfs.getPath(targetFile.toString());
+
+ if (pathInZipfile.getParent() != null) {
+ Files.createDirectories(pathInZipfile.getParent());
+ }
+
+ CopyOption[] options = {
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.COPY_ATTRIBUTES,
+ LinkOption.NOFOLLOW_LINKS
+ };
+ Files.copy(file, pathInZipfile, options);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFileFailed(Path file, IOException exc) {
+ //
+ return FileVisitResult.CONTINUE;
+ }
+
+ });
+
+ }
+
+ /**
+ *
+ * Replaces swagger artifact adding `-jakarta` suffix
+ *
+ */
+ private static void replaceInJar(String filePath) throws Exception {
+ try (FileInputStream fis = new FileInputStream(filePath);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ ZipInputStream zis = new ZipInputStream(bis);
+ ZipOutputStream out = new ZipOutputStream(new FileOutputStream(filePath + ".jar"))) {
+
+ for (ZipEntry zipEntry; (zipEntry = zis.getNextEntry()) != null; ) {
+ out.putNextEntry(new ZipEntry(zipEntry.getName()));
+
+ if (files.contains(zipEntry.getName())) {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(zis));
+ PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)));
+ for (String line; (line = reader.readLine()) != null; ) {
+ line = line.replace("swagger-maven-plugin", "swagger-maven-plugin-jakarta");
+ line = line.replace("swagger-project", "swagger-project-jakarta");
+ line = line.replace("swagger-jaxrs2", "swagger-jaxrs2-jakarta");
+ line = line.replace("swagger-models", "swagger-models-jakarta");
+ line = line.replace("swagger-annotations", "swagger-annotations-jakarta");
+ line = line.replace("swagger-core", "swagger-core-jakarta");
+ line = line.replace("swagger-integration", "swagger-integration-jakarta");
+ writer.println(line);
+ }
+ writer.flush();
+ } else {
+ byte[] buf = new byte[8192];
+ int length;
+ while ((length = zis.read(buf)) > 0) {
+ out.write(buf, 0, length);
+ }
+ }
+
+ }
+ }
+ Files.delete(Paths.get(filePath));
+ Files.move(Paths.get(filePath + ".jar"), Paths.get(filePath));
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ String filePath = args[0];
+ String outPath = args[1];
+ String jakartaVersion = args[2];
+ String jakartaActivationVersion = args[3];
+ String jacksonVersion = args[4];
+
+ replaceInJar(filePath);
+ extract(filePath, outPath);
+
+ // rename dir
+ Files.move(Paths.get(outPath + File.separator +
+ "META-INF" + File.separator +
+ "maven" + File.separator +
+ "io.swagger.core.v3" + File.separator +
+ "swagger-maven-plugin"),
+ Paths.get(outPath + File.separator +
+ "META-INF" + File.separator +
+ "maven" + File.separator +
+ "io.swagger.core.v3" + File.separator +
+ "swagger-maven-plugin-jakarta")
+ );
+
+ Path pluginXmlPath = Paths.get(
+ outPath +
+ File.separator + "META-INF" +
+ File.separator + "maven" +
+ File.separator + "plugin.xml");
+ String pluginXml = new String(Files.readAllBytes(pluginXmlPath));
+ Matcher m = Pattern.compile(jakartaXmlBindRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jakartaXmlBindDep.replace("VERSION", jakartaVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ m = Pattern.compile(jakartaValidationRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jakartaValidationDep.replace("VERSION", jakartaVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ m = Pattern.compile(jacksonJsonRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jacksonJsonDep.replace("VERSION", jacksonVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ m = Pattern.compile(jacksonBaseRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jacksonBaseDep.replace("VERSION", jacksonVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ m = Pattern.compile(jacksonJaxbRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jacksonJaxbDep.replace("VERSION", jacksonVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ m = Pattern.compile(jakartaActivationRegex, Pattern.DOTALL).matcher(pluginXml);
+ while (m.find()) {
+ pluginXml = pluginXml.substring(m.start(), m.start(1)) +
+ jakartaActivationDep.replace("VERSION", jakartaActivationVersion) +
+ pluginXml.substring(m.end(1), m.end());
+ }
+
+ // write back to plugin.xml file
+ Files.write(pluginXmlPath, pluginXml.getBytes());
+
+ // delete the original jar
+ Files.delete(Paths.get(filePath));
+ // compress the new jar
+ jar(Paths.get(outPath), filePath);
+ // delete the temp directory
+ Files.walk(Paths.get(outPath))
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+
+ }
+
+}
diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml
new file mode 100644
index 0000000000..02f3242329
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml
@@ -0,0 +1,25 @@
+
+
+ io.swagger.core.v3
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ ../..
+
+ 4.0.0
+ swagger-models-jakarta
+ swagger-models-jakarta
+ swagger-models-jakarta
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+
+
+
diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md
new file mode 100644
index 0000000000..e96b3ae207
--- /dev/null
+++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md
@@ -0,0 +1,3 @@
+#### Don't delete
+
+Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory
diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml
new file mode 100644
index 0000000000..b98bce6c2c
--- /dev/null
+++ b/modules/swagger-project-jakarta/pom.xml
@@ -0,0 +1,533 @@
+
+ 4.0.0
+ io.swagger.core.v3
+ swagger-project-jakarta
+ pom
+ swagger-project-jakarta
+ swagger-project-jakarta
+ 2.1.7-SNAPSHOT
+ https://github.com/swagger-api/swagger-core
+
+ scm:git:git@github.com:swagger-api/swagger-core.git
+ scm:git:git@github.com:swagger-api/swagger-core.git
+ https://github.com/swagger-api/swagger-core
+
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+ ossrh
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+ 2.2.0
+
+
+
+ frantuma
+ Francesco Tumanischvili
+ frantuma@yahoo.com
+
+
+
+ github
+ https://github.com/swagger-api/swagger-core/issues
+
+
+
+ swagger-swaggersocket
+ https://groups.google.com/forum/#!forum/swagger-swaggersocket
+
+
+
+
+ Apache License 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.html
+ repo
+
+
+
+ install
+ target
+ ${project.artifactId}-${project.version}
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ ${enforcer-plugin-version}
+
+
+ enforce-versions
+
+ enforce
+
+
+
+
+
+ true
+ No Snapshots Allowed!
+
+
+ (,2.1.0),(2.1.0,2.2.0),(2.2.0,)
+ Maven 2.1.0 and 2.2.0 produce incorrect GPG signatures and checksums respectively.
+
+
+
+
+
+
+
+ maven-dependency-plugin
+
+
+ copy-deps
+ package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/lib
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.0
+
+
+ maven-resources-plugin
+ 3.2.0
+
+
+ copy-resources
+ package
+
+ copy-resources
+
+
+ ${project.build.directory}
+ true
+
+
+ transformed
+ false
+
+ ${project.artifactId}-${project.version}.jar
+
+
+
+
+
+
+
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.6.8
+ true
+
+ ossrh
+ https://oss.sonatype.org/
+ true
+ 30
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty-version}
+
+
+ org.glassfish.jersey.core
+ jersey-server
+ ${jersey2-version}
+
+
+ org.javassist
+ javassist
+
+
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet
+ ${jersey2-version}
+
+
+ org.javassist
+ javassist
+
+
+
+
+ org.glassfish.jersey.media
+ jersey-media-multipart
+ ${jersey2-version}
+
+
+ org.javassist
+ javassist
+
+
+
+
+ org.glassfish.jersey.inject
+ jersey-hk2
+ ${jersey2-version}
+
+
+ org.javassist
+ javassist
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ ${enforcer-plugin-version}
+
+
+
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
+ modules/swagger-annotations-jakarta
+ modules/swagger-models-jakarta
+ modules/swagger-core-jakarta
+ modules/swagger-integration-jakarta
+ modules/swagger-jaxrs2-jakarta
+ modules/swagger-jaxrs2-servlet-initializer-jakarta
+ modules/swagger-jaxrs2-servlet-initializer-v2-jakarta
+ modules/swagger-maven-plugin-jakarta
+
+
+
+ target/site
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.0.0
+
+ true
+ 1.8
+ UTF-8
+ 1g
+ true
+
+ https://docs.oracle.com/javase/8/docs/api
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jxr-plugin
+ 2.5
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-project-info-reports-plugin
+ 2.9
+
+
+
+ project-team
+
+
+
+
+
+
+
+
+
+ org.apache.maven
+ maven-plugin-tools-api
+ 3.5.1
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j-version}
+ compile
+
+
+ org.slf4j
+ slf4j-ext
+ ${slf4j-version}
+ compile
+
+
+ org.slf4j
+ slf4j-log4j12
+ ${slf4j-version}
+ provided
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang-version}
+ compile
+
+
+ org.apache.httpcomponents
+ httpclient
+ ${httpcomponents-version}
+
+
+ commons-io
+ commons-io
+ ${commons-io-version}
+ test
+
+
+ io.github.classgraph
+ classgraph
+ ${classgraph-version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback-version}
+ provided
+
+
+ ch.qos.logback
+ logback-core
+ ${logback-version}
+ provided
+
+
+ joda-time
+ joda-time
+ ${joda-time-version}
+
+
+ org.joda
+ joda-convert
+ ${joda-version}
+
+
+ org.yaml
+ snakeyaml
+ ${snakeyaml-version}
+
+
+
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ ${servlet-api-version}
+ provided
+
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ ${jakarta.xml.bind-api-version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+ ${jakarta.activation-api-version}
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ ${jakarta.ws-version}
+
+
+ jakarta.validation
+ jakarta.validation-api
+ ${jakarta.ws-version}
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson-version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson-version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
+ ${jackson-version}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ ${jackson-version}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ jakarta
+ ${jackson-version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-base
+ jakarta
+ ${jackson-version}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jaxb-annotations
+ jakarta
+ ${jackson-version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+
+
+
+
+ 1.9.2
+ 2.9.9
+ 1.27
+ 3.0.0
+ 3.0.0
+ 2.0.0
+ 5.1.2
+ 5.0.0
+ 3.0.1
+ 4.13.1
+ 2.12.1
+ 1.2.3
+ 4.8.95
+ 30.1-jre
+ 1.10.9
+ 3.7
+ 2.6
+ 1.7.25
+ 9.4.9.v20180320
+ 7.3.0
+ 2.28.2
+ 4.3.2
+ 4.5.13
+ 1.15
+
+ 2.21.0
+ 3.0.0-M2
+ 2.22.2
+
+ 0.90
+ 0.90
+ 0
+
+ UTF-8
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+ 3.6.3
+ 1.20
+
+
diff --git a/pom.xml b/pom.xml
index e14e11bac4..1bef27d0c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -212,6 +212,24 @@
true-->
+
+ org.eclipse.transformer
+ org.eclipse.transformer.maven
+ 0.2.0
+
+ jakarta
+ ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed
+
+
+
+ transform-jakarta
+
+ run
+
+ package
+
+
+
@@ -373,6 +391,7 @@
modules/swagger-jaxrs2-servlet-initializer
modules/swagger-jaxrs2-servlet-initializer-v2
modules/swagger-maven-plugin
+ modules/swagger-project-jakarta
@@ -595,7 +614,7 @@
1.9.2
2.9.9
- 1.26
+ 1.27
2.1.6
2.3.3
1.2.2
@@ -603,7 +622,7 @@
4.0.3
2.26
4.13.1
- 2.11.1
+ 2.12.1
1.2.3
4.8.95
30.1-jre