Works with Eclipse 2019-06 or later

How To Run the Testbed in Eclipse with Jetty 10

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 Main.java, 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@git.shibboleth.net:java-idp-testbed
git clone git@git.shibboleth.net:java-idp-jetty-base
git clone git@git.shibboleth.net:java-identity-provider

2b) Optionally, clone additional source code repositories :

git clone git@git.shibboleth.net:java-support
git clone git@git.shibboleth.net:spring-extensions
git clone git@git.shibboleth.net:java-opensaml

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

4) Checkout the 10-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 :

rm target/idp-war-*/WEB-INF/lib/java-support-*.jar
rm target/idp-war-*/WEB-INF/lib/spring-extensions-*.jar
rm target/idp-war-*/WEB-INF/lib/opensaml-*.jar

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

cd java-idp-jetty-base/src/main/resources/jetty-base
java -jar $jetty.home/start.jar --create-files

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

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

8) Go to the testbed webapp : 

https://localhost:8443/index.html

Issues

Logging

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

Example Eclipse Launcher

To create an Eclipse Launcher manually :

Use Eclipse Launcher "Program arguments" not "VM arguments"

Right-click on Main.java > Run As > Java Application 

Eclipse Launcher program arguments :

Program Arguments
-Djetty.home=<path to jetty-home> -Didp.home=classpath: -Didp.webflows=classpath*:/flows -Djava.io.tmpdir=tmp

Eclipse Launcher working directory :

Working Directory
${workspace_loc:idp-jetty-base/src/main/resources/jetty-base}

Example Eclipse Launcher :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
        <listEntry value="/idp-testbed/src/main/java/Main.java"/>
    </listAttribute>
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
        <listEntry value="1"/>
    </listAttribute>
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
    <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-Djetty.home=/opt/jetty/jetty-home-10 -Didp.home=classpath: -Didp.webflows=classpath*:/flows -Djava.io.tmpdir=tmp" />
    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="idp-testbed"/>
    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:idp-jetty-base/src/main/resources/jetty-base}"/>
</launchConfiguration>