The Shibboleth IdP V4 software will leave support on September 1, 2024.

How to Run the Testbed in Eclipse with Jetty 9.4

Works with Eclipse 2019-06 or later

How To Run the Testbed in Eclipse with Jetty 9.4

1) Install Jetty (download and unpack jetty-distribution or jetty-home)

The version of Jetty should match the jetty.version property in the testbed POM (java-idp-testbed/pom.xml)

The Jetty directory should be set as the jetty.home system property in the Eclipse Launcher when running the testbed's, see Program Arguments below.

2) Clone the java-idp-testbed, java-identity-provider, and java-idp-jetty-base source code repositories as peers in the same directory :

git clone git clone git clone

2b) Optionally, clone additional source code repositories :

git clone git clone git clone

3) Import projects into Eclipse : File > Import > Maven > Existing Maven Projects 

4) Checkout the 9.4-testbed-eclipse branch of java-idp-jetty-base

5) Assemble third party dependencies by building the IdP WAR and removing IdP JARs :

cd java-identity-provider/idp-war mvn clean package -DskipTests rm target/idp-war-*/WEB-INF/lib/idp-*.jar

Optionally remove additional JARs :

6) Download logging and testbed dependencies and add to the Jetty server classpath :

7) Run the testbed in Eclipse as a Java Application :

In the idp-testbed project, right-click on idp-testbed-jetty-9.4.launch > Run As > Java Application 

8) Go to the testbed webapp : 




You will probably want to change the root logging level from DEBUG  to INFO  in idp-conf/src/test/resources/logback-test.xml 

Why is Jetty 9.4 different than 9.3 ?

Running the IdP testbed in Eclipse with Jetty version 9.4 requires classpath changes.

I believe this is because :

The code that was changed in 9.4, is that we no long look to load classes/resources from the same classloader that loader jetty. That was really just encouraged code to not properly set the thread context classloader.

For this method to work for you, then the class you are looking for needs to either be on the system classpath or visible to a Classloader that is set as the current thread context classloader. If executed from within a webapp, you will have a classloader that is able to see WEB-INF classes, but jetty and some system classes are hidden from it.

This is a deliberate change, which I think is the correct way to go. However, we are open to understand your use-case of why we may need to search a bit harder for classes, so please describe your classloader setup and classpath.

Example Eclipse Launcher

To create an Eclipse Launcher manually :

Right-click on > Run As > Java Application 

Eclipse Launcher program arguments :

Program Arguments

Eclipse Launcher working directory :

Working Directory

Example Eclipse Launcher :