public static boolean createSharedProject(FrontEndTool frontEndTool, final String projectName)
			throws Exception {
		// create shared project against existing repository
		System.err.println("SharedProjectUtil.createSharedProject(): " + projectName);

		UtilProjectListener projectListener = new UtilProjectListener();
		frontEndTool.addProjectListener(projectListener);

		DockingActionIf action = getAction(frontEndTool, "New Project");
		AbstractDockingTest.performAction(action, false);
		AbstractGuiTest.waitForSwing();

		WizardDialog wm = AbstractDockingTest.waitForDialogComponent(WizardDialog.class);

		ProjectTypePanel typePanel = AbstractDockingTest.findComponent(wm, ProjectTypePanel.class);
		final JRadioButton rb =
			(JRadioButton) AbstractGuiTest.findAbstractButtonByText(typePanel,
				"Shared Project");

		SwingUtilities.invokeAndWait(() -> rb.setSelected(true));

		JButton nextButton = AbstractDockingTest.findButtonByText(wm, "Next >>");
		JButton finishButton = AbstractDockingTest.findButtonByText(wm, "Finish");

		AbstractGuiTest.pressButton(nextButton, true);

		ServerInfoPanel serverPanel = AbstractDockingTest.findComponent(wm, ServerInfoPanel.class);

		final JTextField serverField =
			(JTextField) AbstractGuiTest.findComponentByName(serverPanel, "Server Name");
		final JTextField portNumberField =
			(JTextField) AbstractGuiTest.findComponentByName(serverPanel, "Port Number");

		SwingUtilities.invokeAndWait(() -> {
			serverField.setText(LOCALHOST);
			portNumberField.setText(Integer.toString(SERVER_PORT));
		});

		AbstractGuiTest.pressButton(nextButton);

		// next panel should be the repository panel
		RepositoryPanel repPanel = AbstractDockingTest.findComponent(wm, RepositoryPanel.class);

		final JList<?> repList = AbstractGuiTest.findComponent(repPanel, JList.class);

		// select existing repository
		SwingUtilities.invokeAndWait(() -> repList.setSelectedIndex(0));

		// next panel is project location panel
		AbstractGuiTest.pressButton(nextButton, true);

		final SelectProjectPanel projPanel =
			AbstractDockingTest.findComponent(wm, SelectProjectPanel.class);

		final String testProjectDirectory = AbstractGTest.getTestDirectoryPath();
		final JTextField projDirField =
			(JTextField) AbstractGuiTest.findComponentByName(projPanel, "Project Directory");
		final JTextField projNameField =
			(JTextField) AbstractGuiTest.findComponentByName(projPanel, "Project Name");

		SwingUtilities.invokeAndWait(() -> {
			projDirField.setText(testProjectDirectory);
			projNameField.setText(projectName);
		});

		assertTrue("Finish button is unexpectedly disabled", finishButton.isEnabled());

		AbstractGuiTest.pressButton(finishButton, true);
		AbstractGuiTest.waitForSwing();
		boolean didOpen = waitForProjectToOpen(projectName, projectListener);
		System.err.println("\tdid the project get opened?: " + didOpen);
		return didOpen;
	}
Static method to create a shared project, and start a server.
Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/framework/main/SharedProjectUtil.java