diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 22e9f6b2b..b68fa8483 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -36,10 +36,6 @@ updates: - RELEASE802 - RELEASE81 - RELEASE82 - # [JENKINS-68698] Must remain within Jetty 10.x until the Jakarta EE 9 - # migration is complete - - dependency-name: "org.eclipse.jetty:jetty-bom" - versions: [">=11.0.0"] # FIPS mismatches - dependency-name: org.jenkins-ci.modules:instance-identity - package-ecosystem: github-actions diff --git a/Jenkinsfile b/Jenkinsfile index ba75acfd8..07027e873 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ * allowing one to test against multiple Jenkins versions. */ buildPlugin(useContainerAgent: true, configurations: [ - [platform: 'linux', jdk: 11], - [platform: 'windows', jdk: 11], - [platform: 'linux', jdk: 17, jenkins: '2.462'], + [platform: 'linux', jdk: 17], + [platform: 'windows', jdk: 17], + [platform: 'linux', jdk: 21, jenkins: '2.462'] ]) diff --git a/pom.xml b/pom.xml index 8ab406d8f..b018aede0 100644 --- a/pom.xml +++ b/pom.xml @@ -61,8 +61,7 @@ THE SOFTWARE. jenkinsci/${project.artifactId} --patch-module=java.base=${project.build.outputDirectory}/netbeans/harness/modules/ext/org-netbeans-insane-hook.jar --add-exports=java.base/org.netbeans.insane.hook=ALL-UNNAMED - - 11 + 12.0.10 @@ -70,7 +69,14 @@ THE SOFTWARE. org.eclipse.jetty jetty-bom - 10.0.21 + ${jetty.version} + pom + import + + + org.eclipse.jetty.ee8 + jetty-ee8-bom + ${jetty.version} pom import @@ -120,8 +126,8 @@ THE SOFTWARE. - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee8 + jetty-ee8-webapp @@ -131,11 +137,15 @@ THE SOFTWARE. - org.eclipse.jetty.websocket - - websocket-jetty-server + org.eclipse.jetty.ee8.websocket + jetty-ee8-websocket-jetty-server + + + jakarta.annotation + jakarta.annotation-api + org.slf4j slf4j-api diff --git a/src/main/java/jenkins/benchmark/jmh/JmhBenchmarkState.java b/src/main/java/jenkins/benchmark/jmh/JmhBenchmarkState.java index 8e90c078d..8ba0f8173 100644 --- a/src/main/java/jenkins/benchmark/jmh/JmhBenchmarkState.java +++ b/src/main/java/jenkins/benchmark/jmh/JmhBenchmarkState.java @@ -14,8 +14,8 @@ import javax.servlet.ServletContext; import jenkins.model.Jenkins; import jenkins.model.JenkinsLocationConfiguration; +import org.eclipse.jetty.ee8.webapp.WebAppContext; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.webapp.WebAppContext; import org.jvnet.hudson.test.JavaNetReverseProxy; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.TemporaryDirectoryAllocator; diff --git a/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java b/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java index 416cb0cd8..ff5145725 100644 --- a/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java +++ b/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java @@ -139,6 +139,10 @@ import org.acegisecurity.userdetails.UserDetails; import org.acegisecurity.userdetails.UsernameNotFoundException; import org.apache.commons.beanutils.PropertyUtils; +import org.eclipse.jetty.ee8.webapp.Configuration; +import org.eclipse.jetty.ee8.webapp.WebAppContext; +import org.eclipse.jetty.ee8.webapp.WebXmlConfiguration; +import org.eclipse.jetty.ee8.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.eclipse.jetty.http.HttpCompliance; import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.security.HashLoginService; @@ -150,10 +154,6 @@ import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.util.security.Password; import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.webapp.WebXmlConfiguration; -import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.htmlunit.AjaxController; import org.htmlunit.AlertHandler; import org.htmlunit.BrowserVersion; @@ -550,7 +550,13 @@ protected ServletContext createWebServer() throws Exception { server = new Server(qtp); explodedWarDir = WarExploder.getExplodedDir(); - WebAppContext context = new WebAppContext(explodedWarDir.getPath(), contextPath); + WebAppContext context = new WebAppContext(explodedWarDir.getPath(), contextPath) { + @Override + protected ClassLoader configureClassLoader(ClassLoader loader) { + // Use flat classpath in tests + return loader; + } + }; context.setResourceBase(explodedWarDir.getPath()); context.setClassLoader(getClass().getClassLoader()); context.setConfigurations(new Configuration[]{new WebXmlConfiguration()}); diff --git a/src/main/java/org/jvnet/hudson/test/JavaNetReverseProxy.java b/src/main/java/org/jvnet/hudson/test/JavaNetReverseProxy.java index f59484e0a..ceab85e34 100644 --- a/src/main/java/org/jvnet/hudson/test/JavaNetReverseProxy.java +++ b/src/main/java/org/jvnet/hudson/test/JavaNetReverseProxy.java @@ -10,11 +10,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; +import org.eclipse.jetty.ee8.servlet.ServletContextHandler; +import org.eclipse.jetty.ee8.servlet.ServletHolder; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.thread.QueuedThreadPool; /** diff --git a/src/main/java/org/jvnet/hudson/test/JenkinsRule.java b/src/main/java/org/jvnet/hudson/test/JenkinsRule.java index 59a035384..50b587ca8 100644 --- a/src/main/java/org/jvnet/hudson/test/JenkinsRule.java +++ b/src/main/java/org/jvnet/hudson/test/JenkinsRule.java @@ -174,6 +174,10 @@ import net.sf.json.JSONObject; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.io.FileUtils; +import org.eclipse.jetty.ee8.webapp.Configuration; +import org.eclipse.jetty.ee8.webapp.WebAppContext; +import org.eclipse.jetty.ee8.webapp.WebXmlConfiguration; +import org.eclipse.jetty.ee8.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.eclipse.jetty.http.HttpCompliance; import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.security.HashLoginService; @@ -185,10 +189,6 @@ import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.util.security.Password; import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.webapp.WebXmlConfiguration; -import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.htmlunit.AjaxController; import org.htmlunit.BrowserVersion; import org.htmlunit.DefaultCssErrorHandler; @@ -855,7 +855,13 @@ public static WebAppContext _createWebAppContext( qtp.setName("Jetty (JenkinsRule)"); Server server = new Server(qtp); - WebAppContext context = new WebAppContext(WarExploder.getExplodedDir().getPath(), contextPath); + WebAppContext context = new WebAppContext(WarExploder.getExplodedDir().getPath(), contextPath) { + @Override + protected ClassLoader configureClassLoader(ClassLoader loader) { + // Use flat classpath in tests + return loader; + } + }; context.setClassLoader(classLoader); context.setConfigurations(new Configuration[]{new WebXmlConfiguration()}); context.addBean(new NoListenerConfiguration(context)); diff --git a/src/main/java/org/jvnet/hudson/test/NoListenerConfiguration.java b/src/main/java/org/jvnet/hudson/test/NoListenerConfiguration.java index dee8de59b..2b6f7c9d3 100644 --- a/src/main/java/org/jvnet/hudson/test/NoListenerConfiguration.java +++ b/src/main/java/org/jvnet/hudson/test/NoListenerConfiguration.java @@ -26,8 +26,8 @@ import hudson.WebAppMain; import java.util.EventListener; import javax.servlet.ServletContextListener; +import org.eclipse.jetty.ee8.webapp.WebAppContext; import org.eclipse.jetty.util.component.AbstractLifeCycle; -import org.eclipse.jetty.webapp.WebAppContext; /** * Kills off the {@link WebAppMain} {@link ServletContextListener}.