Skip to content

Instantly share code, notes, and snippets.

@bric3
Last active March 20, 2022 23:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bric3/607bbf6a8de2ead07355e05a9b3d9435 to your computer and use it in GitHub Desktop.
Save bric3/607bbf6a8de2ead07355e05a9b3d9435 to your computer and use it in GitHub Desktop.
Develop JDK Mission Control within IntelliJ

Opening in IJ

JMC with IntelliJ

At this stage there’s two approach:

  • If you only need to work on the core libraries, then you only need those, and they can be imported as a maven project with some configuration
  • If you need the full blown JMC, then you need the other import approach, that is a mix of .project - .classpath and Maven projects.

Working on the on the core libraries

  1. File | Open… , then select the core folder in the JMC cloned repository,
  2. Trust the project (also tick the Trust projects in <JMC clone path> as well)
  3. open as a Maven project
  4. Configure the JDK, go to the project structure, select a JDK 11, but make sure the language level is set to 8.
  5. In the general preferences:
    1. Go to Preferences | Build, Execution, Deployment | Build Tools | Maven, toggle on Always update snaphosts, make sure the JDK for importer is is set to the same JDK 11.
    2. Go to Preferences | Build, Execution, Deployment | Build Tools | Maven | Runner , tick the Delegate IDE/ build/run actions to Maven, make sure the JDK (for the runner) is is set to the same JDK 11, tick Skip Tests. Not necessary after openjdk/jmc#354
    3. Preferences | Build, Execution, Deployment | Build Tools | Maven | Running Tests, untick argLine Related to IDEA-145991, otherwise you’ll get this error is Error: Could not find or load main class @{surefireArgLine}

This will load the core JMC libraries (the ones that are used to parse and analyze JFR files) in IntelliJ. From this point you should be able to build.

⚠️ On reimport make sure the all JDK are the same, ie JDK-11, otherwise you might see java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;

Note the core libraries test-jars follows the easy way not the preferred way as documented on the jar plugin. Done in openjdk/jmc#354

Working on the JMC app and the core libraries

You need to have opened the jmc project first in Eclipse and resolve the p2 depdencies using the worspace $HOME/jmc-workspace, because the project is setup to find the necessary dependencies in the worspace metadata.

image

⚠️ Work-in-progress At this stage, I manually configured the IntelliJ module files, a patch is available here (the latest commit of ij-config branch).

curl -s https://github.com/bric3/jmc/commit/0814c976a77a9ee16c28315d189b64dc9f9688ae.patch | git apply -v

However running (and debugging) is not yet supported.

Remaining things to do

  • Find a way to run/debug
  • * [ ] Configure Use the Eclipse formatter, or maybe spotless formatter instead.
  • Find a way to handle Eclipse upgrade (ie. to regenerate Eclipse dependencies)

CF64285C-1F06-43A0-B495-622F1E6A1231

Preparations

First the project has to be opened in Eclipse at least once.

Open the project structure, before importing (i.e. on the Welcome to IntelliJ IDEA dialog), go to File | Project Structure

Setup the JDK runtime

Add or Rename JDK, with to following

  • JavaSE-11
  • JavaSE-1.8
Just open

Once you applied the patch, there's a .idea folder. If the patch failed, you may need to remove all .iml and .idea folder, and apply the path again.

So you just need to open the jmc/ folder via File | Open....

If IntelliJ IDEA asks you to choose between Maven and Eclipse, either you opened a file, or something went wrong with the patching, please clean and retry the patch.

TIP: In the project view, toggle the appearance to flatten modules 2419460A-FBC1-4811-988F-3F8A531AAC02


Methodology used to generate the project files

Proceed to the project import
  1. File | New | Module from Existing Sources…, then select the JMC clone folder, click Open.
  2. Select Import module from external model, choose Eclipse, click Next
  3. Select Create module files near .classpath files, tick Link created IntelliJ modules to Eclipse project files, click Next
  4. Select all projects under application/, and the org.openjdk.jmc.agent (agent), core project should already be opened. Click Next
Fix the errors

Some dependencies declared in the .classpath have to be declared manually in IntelliJ, e.g. the Eclipse PDE / RCP dependencies. Which are represented as the ECLIPSE library. There is also the JDK_JMC library which is like the extra JDK 8 libraries.

Simple generics issue

In DefaultValueMap.java#L65 there’s a cast that IntelliJ don’t quite like:

  	@SuppressWarnings("unchecked")
  	public DefaultValueMap(IMapper<K, IOptionDescriptor<?>> fallbacks) {
		// NOTE: Cast is just to circumvent issue in Eclipse 4.5.2 with JDK 7 compiler/libs.
- 		this((Map<K, ? extends IOptionDescriptor<?>>) Collections.emptyMap(), fallbacks);
+		this(Collections.emptyMap(), fallbacks);
  	}

  	public DefaultValueMap(Map<K, ? extends IOptionDescriptor<?>> knownOptions,
  			IMapper<K, IOptionDescriptor<?>> fallbacks) {
Define the serviceability libraries (JMC_JDK)

Create a Library named JMC_JDK, then add the following libraries * jdk8/jre/lib/ext/jfxrt.jar * jdk8/jre/lib/jfxswt.jar * jdk8/lib/tools.jar * jdk8/lib/jconsole.jar

Define the Eclipse PDE/RCP dependencies

These dependencies are normally declared as OSGI dependencies (Eclipse plugins), if you opened the JMC project in Eclipse before, in the chosen workspace (say it’s ~/jmc-worspace) you’ll see PDE dependencies in the following path.

~/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/

⚠️ Note the version of these libraries change with the actual target.

For projects, found the following Plug-in dependencies, e.g. for org.openjdk.jmc.pde, org.openjdk.jmc.ui, org.openjdk.jmc.flighrecorder.pde, org.openjdk.jmc.ide.ui

  • org.eclipse.ui_3.119.0.v20210111-1350.jar

  • org.eclipse.swt_3.116.100.v20210602-2209.jar

  • org.eclipse.swt.cocoa.macosx.x86_64_3.116.100.v20210602-2209.jar

  • org.eclipse.jface_3.22.200.v20210401-0958.jar

  • org.eclipse.core.commands_3.10.0.v20210401-0744.jar

  • org.eclipse.ui.workbench_3.122.200.v20210506-1640.jar

  • org.eclipse.e4.ui.workbench3_0.15.500.v20201021-1339.jar

  • org.eclipse.ui.forms_3.11.100.v20210108-1139.jar

  • org.eclipse.ui.views_3.11.0.v20210111-1351.jar

  • org.eclipse.core.runtime_3.22.0.v20210506-1025.jar

  • org.eclipse.osgi_3.16.300.v20210525-1715.jar

  • org.eclipse.osgi.compatibility.state_1.2.400.v20210401-1438.jar

  • org.eclipse.equinox.common_3.15.0.v20210518-0604.jar

  • org.eclipse.core.jobs_3.11.0.v20210420-1453.jar

  • org.eclipse.equinox.registry_3.10.200.v20210503-1606.jar

  • org.eclipse.equinox.preferences_3.8.200.v20210212-1143.jar

  • org.eclipse.core.contenttype_3.7.1000.v20210409-1722.jar

  • org.eclipse.equinox.app_1.5.100.v20210212-1143.jar

  • org.eclipse.pde.core_3.14.300.v20210515-0638.jar

  • org.eclipse.e4.ui.ide_3.15.200.v20210108-1832.jar

  • org.eclipse.core.resources_3.15.0.v20210521-0722.jar

  • org.eclipse.pde.ui_3.13.100.v20210515-0638.jar

  • org.eclipse.pde.core_3.14.300.v20210515-0638.jar

  • org.eclipse.pde.launching_3.9.300.v20210513-1344.jar

  • org.eclipse.core.expressions_3.7.100.v20210203-1000.jar

  • org.eclipse.ui.ide_3.18.200.v20210523-1724.jar

  • org.eclipse.e4.core.contexts_1.8.400.v20191217-1710.jar

  • org.eclipse.e4.core.di_1.7.800.v20210526-1618.jar

  • org.eclipse.help_3.9.0.v20210507-0822.jar

  • org.eclipse.equinox.p2.ui_2.7.100.v20210426-1115.jar

  • org.eclipse.equinox.p2.core_2.7.0.v20210315-2042.jar

  • org.eclipse.equinox.p2.operations_2.6.0.v20210315-2228.jar

  • org.eclipse.equinox.p2.repository_2.5.100.v20210329-1206.jar

  • org.eclipse.equinox.p2.metadata_2.6.0.v20210331-1610.jar

  • org.eclipse.ui.intro_3.6.200.v20210409-1747.jar

  • com.sun.mail.jakarta.mail_2.0.1.jar <= for org.openjdk.jmc.rjmx

  • javax.inject_1.0.0.v20091030.jar

Note some modules have dependencies that only makes sense in the Eclipse JDT, eg org.openjdk.jmc.ide.jdt

  • org.eclipse.jface.text_3.18.0.v20210512-1640.jar
  • org.eclipse.ui.workbench.texteditor_3.16.100.v20210512-1009.jar
  • org.eclipse.jdt.core_3.26.0.v20210609-0549.jar
  • org.eclipse.jdt.ui_3.23.0.v20210530-1810.jar

This can be configured as a global library or as a project library

If this is an application wide library (Global Library), then it will be located here : Library/Application\ Support/JetBrains/IntelliJIdea2021.3/options/applicationLibraries.xml.

<application>
  <component name="libraryTable">
    <library name="adoptopenjdk.jemmy.swt" type="repository">
      <properties maven-id="org.adoptopenjdk:jemmy-swt:2.0.0" />
      <CLASSES>
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-swt/2.0.0/jemmy-swt-2.0.0.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/swt/org.eclipse.swt.cocoa.macosx.x86_64/4.3/org.eclipse.swt.cocoa.macosx.x86_64-4.3.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-core/2.0.0/jemmy-core-2.0.0.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-browser/2.0.0/jemmy-browser-2.0.0.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-awt-input/2.0.0/jemmy-awt-input-2.0.0.jar!/" />
      </CLASSES>
      <JAVADOC />
      <SOURCES>
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-swt/2.0.0/jemmy-swt-2.0.0-sources.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/swt/org.eclipse.swt.cocoa.macosx.x86_64/4.3/org.eclipse.swt.cocoa.macosx.x86_64-4.3-sources.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-core/2.0.0/jemmy-core-2.0.0-sources.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-browser/2.0.0/jemmy-browser-2.0.0-sources.jar!/" />
        <root url="jar://$MAVEN_REPOSITORY$/org/adoptopenjdk/jemmy-awt-input/2.0.0/jemmy-awt-input-2.0.0-sources.jar!/" />
      </SOURCES>
    </library>
    <library name="ECLIPSE">
      <CLASSES>
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui_3.119.0.v20210111-1350.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.commands_3.10.0.v20210401-0744.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.contenttype_3.7.1000.v20210409-1722.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.jobs_3.11.0.v20210420-1453.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.runtime_3.22.0.v20210506-1025.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jface_3.22.200.v20210401-0958.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.swt.cocoa.macosx.x86_64_3.116.100.v20210602-2209.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.forms_3.11.100.v20210108-1139.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.views_3.11.0.v20210111-1351.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.workbench_3.122.200.v20210506-1640.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.ui.workbench_1.13.0.v20210521-0741.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.app_1.5.100.v20210212-1143.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.common_3.15.0.v20210518-0604.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.preferences_3.8.200.v20210212-1143.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.registry_3.10.200.v20210503-1606.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi_3.16.300.v20210525-1715.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi.compatibility.state_1.2.400.v20210401-1438.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.core_3.14.300.v20210515-0638.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.ui.ide_3.15.200.v20210108-1832.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.resources_3.15.0.v20210521-0722.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.launching_3.9.300.v20210513-1344.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.ui_3.13.100.v20210515-0638.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.expressions_3.7.100.v20210203-1000.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.ide_3.18.200.v20210523-1724.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.core_3.26.0.v20210609-0549.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.workbench.texteditor_3.16.100.v20210512-1009.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.ui_3.23.0.v20210530-1810.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.text_3.12.0.v20210512-1644.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/com.sun.mail.jakarta.mail_2.0.1.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.net_1.3.1100.v20210424-0724.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/javax.inject_1.0.0.v20091030.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.core.contexts_1.8.400.v20191217-1710.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.core.di_1.7.800.v20210526-1618.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.help_3.9.0.v20210507-0822.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.ui_2.7.100.v20210426-1115.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.core_2.7.0.v20210315-2042.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.repository_2.5.100.v20210329-1206.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.operations_2.6.0.v20210315-2228.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.metadata_2.6.0.v20210331-1610.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.intro_3.6.200.v20210409-1747.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.server_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.servlet_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.websocket.api_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.websocket.server_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.websocket.servlet_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.http_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.io_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.util_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/jakarta.servlet-api_4.0.0.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jface.text_3.18.0.v20210512-1640.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.debug.core_3.18.100.v20210511-0446.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.debug.ui_3.15.0.v20210525-1810.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.junit_3.12.0.v20210521-1840.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.launching_3.19.200.v20210326-1452.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.editors_3.14.100.v20210513-1110.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.junit.core_3.10.1100.v20210429-2046.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.debug.ui_3.12.300.v20210517-0748.jar!/" />
      </CLASSES>
      <JAVADOC />
      <SOURCES>
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.commands.source_3.10.0.v20210401-0744.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.contenttype.source_3.7.1000.v20210409-1722.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.jobs.source_3.11.0.v20210420-1453.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.runtime.source_3.22.0.v20210506-1025.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jface.source_3.22.200.v20210401-0958.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.swt.cocoa.macosx.x86_64.source_3.116.100.v20210602-2209.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.forms.source_3.11.100.v20210108-1139.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.source_3.119.0.v20210111-1350.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.views.source_3.11.0.v20210111-1351.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.workbench.source_3.122.200.v20210506-1640.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.ui.workbench.source_1.13.0.v20210521-0741.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.app.source_1.5.100.v20210212-1143.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.common.source_3.15.0.v20210518-0604.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.preferences.source_3.8.200.v20210212-1143.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.registry.source_3.10.200.v20210503-1606.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi.compatibility.state.source_1.2.400.v20210401-1438.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi.source_3.16.300.v20210525-1715.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.core.source_3.14.300.v20210515-0638.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.ui.ide.source_3.15.200.v20210108-1832.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.resources.source_3.15.0.v20210521-0722.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.launching.source_3.9.300.v20210513-1344.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.ui.source_3.13.100.v20210515-0638.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.expressions.source_3.7.100.v20210203-1000.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.ide.source_3.18.200.v20210523-1724.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.core.source_3.26.0.v20210609-0549.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.workbench.texteditor.source_3.16.100.v20210512-1009.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.ui.source_3.23.0.v20210530-1810.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.ui_3.23.0.v20210530-1810.jar!/preview" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.text.source_3.12.0.v20210512-1644.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.core.net.source_1.3.1100.v20210424-0724.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/javax.inject.source_1.0.0.v20091030.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.core.contexts.source_1.8.400.v20191217-1710.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.e4.core.di.source_1.7.800.v20210526-1618.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.help.source_3.9.0.v20210507-0822.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.ui.source_2.7.100.v20210426-1115.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.core.source_2.7.0.v20210315-2042.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.repository.source_2.5.100.v20210329-1206.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.operations.source_2.6.0.v20210315-2228.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.p2.metadata.source_2.6.0.v20210331-1610.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.intro.source_3.6.200.v20210409-1747.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.server.source_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.servlet.source_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.http.source_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.io.source_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.util.source_10.0.5.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/jakarta.servlet-api.source_4.0.0.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jface.text.source_3.18.0.v20210512-1640.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.debug.core.source_3.18.100.v20210511-0446.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.debug.ui.source_3.15.0.v20210525-1810.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.junit.core.source_3.10.1100.v20210429-2046.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.launching.source_3.19.200.v20210326-1452.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.ui.editors.source_3.14.100.v20210513-1110.jar!/" />
        <root url="jar://$USER_HOME$/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jdt.debug.ui.source_3.12.300.v20210517-0748.jar!/" />
      </SOURCES>
    </library>
    <library name="JMC_JDK">
      <CLASSES>
        <root url="jar://$USER_HOME$/.asdf/installs/java/corretto-8.312.07.1/lib/jconsole.jar!/" />
        <root url="jar://$USER_HOME$/.asdf/installs/java/corretto-8.312.07.1/lib/tools.jar!/" />
        <root url="jar://$USER_HOME$/.asdf/installs/java/corretto-8.312.07.1/jre/lib/ext/jfxrt.jar!/" />
        <root url="jar://$USER_HOME$/.asdf/installs/java/corretto-8.312.07.1/jre/lib/jfxswt.jar!/" />
      </CLASSES>
      <JAVADOC />
      <SOURCES>
        <root url="jar://$USER_HOME$/.asdf/installs/java/corretto-8.312.07.1/lib/tools.jar!/" />
      </SOURCES>
    </library>
  </component>
</application>
Compiler

During this long process I found that using the Eclipse compiler worked better than javac, however once done javac is ok as well. This is configurable in Preferences | Build, Execution, Deployment | Compiler | Java Compiler

This file may require the Eclipse Compiler FilterEditor.java#L440-L441

ViewerDropAdapter dropTarget = DndToolkit.createLocalDropListTarget(tree, CompositeNode.class, FilterNode.class, this::performDrop, this::validateDrop);

The javac compiler error is

java: incompatible types: invalid method reference
    incompatible types: java.util.List<capture#1 of ? extends U> cannot be converted to java.util.List<? extends org.openjdk.jmc.flightrecorder.ui.common.FilterEditor.FilterNode>
Resolve module and dependencies

Manually resolve the JUnit dependency in test projects D37C63D2-55F0-40FD-9680-CC1010BCD995

Manually link dependent project, eg from joverflow.tests to joverflow A8F3FBB3-B16F-4A86-93CF-2E6E680787E5

From org.opemjdk.jmc.joverflow (imported as Eclipse project) to org.openjdk.jmc.common (imported as a core Maven project) 6C0778E9-0B70-4185-9C0E-257AE3982E5C

Some application projects may fail to compile

java: cannot access org.eclipse.pde.ui.IFieldData
 bad class file: /Users/brice.dutheil/jmc-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.pde.ui_3.13.100.v20210515-0638.jar!/org/eclipse/pde/ui/IFieldData.class
   class file has wrong version 55.0, should be 52.0
   Please remove or make sure it appears in the correct subdirectory of the classpath.

Just change their JDK to JavaSE-11 (do not do this on core libraries).

Sometimes during compilation an error about accessing is appears

java: cannot access org.openjdk.jmc.ui.common.resource.IImageResource
 class file for org.openjdk.jmc.ui.common.resource.IImageResource not found

This happens because some packages are not exported, at this time, I am choosing to import those explicitly. By adding a Module dependency, in this case org.openjdk.jmc.ui.common

For this one, add the common module (it’s the one from core)

java: cannot access org.openjdk.jmc.common.IDescribable
  class file for org.openjdk.jmc.common.IDescribable not found

For this one, add the common.test module (from the core)

java: cannot access org.openjdk.jmc.common.test.MCTestCase
  class file for org.openjdk.jmc.common.test.MCTestCase not found

For this one, it’s more tricky, it needs to add the org.eclipse.e4.core.di_1.7.800.v20210526-1618.jar dependency to the ECLIPSE global dependency

java: cannot access org.eclipse.e4.core.di.InjectionException
  class file for org.eclipse.e4.core.di.InjectionException not found

For /agent project, right click on pom.xml, and select Add as maven Project (bottom of the menu), it should resolve ASM dependencies

For /application/uitests/org.openjdk.jmc.test.jemmy Go to Project structure | Global Libraries, click ➕ (New Global Library), select From Maven. Enter org.adoptopenjdk:jemmy-swt:2.0.0, optionally tick Sources. Suppose this global library is named adoptopenjdk.jemmy.swt. 7D1147A4-A560-437F-8C8D-93AA2E1DC9E8

Then navigate to Project Settings | Modules, select org.openjdk.jmc.test.jemmy, then to the Dependencies tab, then click ➕ (Add) to add the global library, select Library…. In the popup dialog, scroll down to Global Libraries, then select adoptopenjdk.jemmy.swt and validate. 102E6D07-67D0-40BB-9936-90F370E6CBFE


The notes below represent an active research on the dependencies resolution for JMC.

App Dependencies

Platform definition

platform-definition-2021-06.target

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Copyright -->
<?pde version="3.8"?>
<target name="jmc-target-2021-06" sequenceNumber="47">
    <locations>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <unit id="com.sun.mail.jakarta.mail" version="2.0.1"/>
            <unit id="com.sun.activation.jakarta.activation" version="2.0.1"/>
            <unit id="org.owasp.encoder" version="1.2.3"/>
            <unit id="org.lz4.lz4-java" version="1.8.0"/>
            <unit id="org.hdrhistogram.HdrHistogram" version="2.1.12"/>
            <unit id="org.adoptopenjdk.jemmy-awt-input" version="2.0.0"/>
            <unit id="org.adoptopenjdk.jemmy-browser" version="2.0.0"/>
            <unit id="org.adoptopenjdk.jemmy-core" version="2.0.0"/>
            <unit id="org.adoptopenjdk.jemmy-swt" version="2.0.0"/>
            <unit id="org.eclipse.jetty.servlet-api" version="4.0.6"/>
            <unit id="org.eclipse.jetty.websocket.api" version="10.0.5"/>
            <unit id="org.eclipse.jetty.websocket.server" version="10.0.5"/>
            <unit id="org.eclipse.jetty.websocket.servlet" version="10.0.5"/>
            <unit id="org.eclipse.jetty.websocket.javax.server" version="10.0.5"/>
            <unit id="org.apache.aries.spifly.dynamic.bundle" version="1.3.4"/>
            <repository location="http://localhost:8080/site"/>
        </location>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <unit id="org.eclipse.equinox.executable.feature.group" version="3.8.1200.v20210527-0259"/>
            <unit id="org.eclipse.pde.feature.group" version="3.14.800.v20210611-1636"/>
            <unit id="org.eclipse.platform.sdk" version="4.20.0.I20210611-1600"/>
            <repository location="http://download.eclipse.org/releases/2021-06/"/>
        </location>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <unit id="org.eclipse.babel.nls_eclipse_ja.feature.group" version="4.20.0.v20210630020001"/>
            <unit id="org.eclipse.babel.nls_eclipse_zh.feature.group" version="4.20.0.v20210630020001"/>
            <repository location="https://archive.eclipse.org/technology/babel/update-site/R0.19.0/2021-06/"/>
        </location>
    </locations>
    <targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
</target>

The repository has to be a p2 repository. This is declared in the maven project org.openjdk.jmc:platform-definition-2021-06, and used in the default profile of the root pom.xml :

        <profile>
            <id>2021-06</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.eclipse.tycho</groupId>
                        <artifactId>target-platform-configuration</artifactId>
                        <version>${tycho.version}</version>
                        <configuration>
                            <target>
                                <artifact>
                                    <groupId>org.openjdk.jmc</groupId>
                                    <artifactId>platform-definition-2021-06</artifactId>
                                    <version>${revision}${changelist}</version>
                                </artifact>
                            </target>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

Local dependencies

For dependencies listed on maven central, the project requires a local jetty server, that serves an artificial p2 site that map the maven coordinate eventually patching OSGI meta-data, the definition is here : third-party/pom.xml :

<plugin>
	<groupId>org.reficio</groupId>
	<artifactId>p2-maven-plugin</artifactId>
	<version>${p2-maven-plugin.version}</version>
	<executions>
		<execution>
			<id>default-cli</id>
			<configuration>
				<additionalArgs>-nouses</additionalArgs>
				<pedantic>true</pedantic>
				<artifacts>
					<!-- specify third party non-OSGi dependencies here -->
					<!-- groupId:artifactId:version -->
					<artifact>
						<id>com.sun.mail:jakarta.mail:${jakarta.mail.version}</id>
						<override>true</override>
						<instructions>
							<Import-Package>*;resolution:=optional</Import-Package>
							<Export-Package>*</Export-Package>
						</instructions>
					</artifact>
					<artifact>
						<id>com.sun.activation:jakarta.activation:${jakarta.activation.version}</id>
					</artifact>
					<artifact>
						<id>org.owasp.encoder:encoder:${owasp.encoder.version}</id>
					</artifact>
					<artifact>
						<id>org.lz4:lz4-java:${lz4.version}</id>
						<override>true</override>
						<instructions>
							<Bundle-Name>org.lz4.lz4-java</Bundle-Name>
							<Bundle-SymbolicName>org.lz4.lz4-java</Bundle-SymbolicName>
						</instructions>
					</artifact>
					<artifact>
						<id>org.hdrhistogram:HdrHistogram:${hdrhistogram.version}</id>
					</artifact>
					<artifact>
						<id>org.adoptopenjdk:jemmy-awt-input:${jemmy.version}</id>
					</artifact>
					<artifact>
						<id>org.adoptopenjdk:jemmy-browser:${jemmy.version}</id>
					</artifact>
					<artifact>
						<id>org.adoptopenjdk:jemmy-core:${jemmy.version}</id>
					</artifact>
					<artifact>
						<id>org.adoptopenjdk:jemmy-swt:${jemmy.version}</id>
					</artifact>
					<artifact>
						<id>org.eclipse.jetty.websocket:websocket-jetty-server:${jetty.version}</id>
					</artifact>
					<artifact>
						<id>org.eclipse.jetty.websocket:websocket-javax-server:${jetty.version}</id>
					</artifact>
					<artifact>
						<id>org.eclipse.jetty.websocket:websocket-jetty-api:${jetty.version}</id>
					</artifact>
					<artifact>
						<id>org.apache.aries.spifly:org.apache.aries.spifly.dynamic.bundle:${spifly.version}</id>
					</artifact>
				</artifacts>
			</configuration>
		</execution>
	</executions>
</plugin>

Layout served by jetty

http://localhost:8080/site
├── artifacts.jar
├── category.xml
├── content.jar
└── plugins
    ├── com.sun.activation.jakarta.activation_1.2.1.jar
    ├── com.sun.mail.jakarta.mail_1.6.5.jar
    ├── org.adoptopenjdk.jemmy-awt-input_2.0.0.jar
    ├── org.adoptopenjdk.jemmy-browser_2.0.0.jar
    ├── org.adoptopenjdk.jemmy-core_2.0.0.jar
    ├── org.adoptopenjdk.jemmy-swt_2.0.0.jar
    ├── org.eclipse.swt.cocoa.macosx.x86_64_4.3.0.jar
    ├── org.hdrhistogram.HdrHistogram_2.1.12.jar
    ├── org.lz4.lz4-java_1.7.1.jar
    ├── org.owasp.encoder_1.2.2.jar
    └── org.twitter4j.core_4.0.7.jar

Eclipse repositories

Ideas 💡

  1. Extend the Eclipse PDE partial plugin to support .target files, at least the one from JMC
  2. Download the jars from the .target in a specific folder, possibly….
    1. Using P2 director command line tool
    2. Download manually the RCP Runtime from 4.22 - Eclipse Project Downloads
    3. Still exploring....

releases/2021-06 software repository

https://download.eclipse.org/releases/2021-06/
├── p2.index
├── compositeContent.jar
├── compositeArtifacts.jar
└── 202106161001/
    ├── binary/
    │   ├── ...
    │   ├── org.eclipse.equinox.executable_root.cocoa.macosx.aarch64_3.8.1200.v20210527-0259
    │   ├── org.eclipse.equinox.executable_root.cocoa.macosx.x86_64_3.8.1200.v20210527-0259
    │   ├── org.eclipse.equinox.executable_root.gtk.linux.aarch64_3.8.1200.v20210527-0259
    │   ├── org.eclipse.equinox.executable_root.gtk.linux.ppc64le_3.8.1200.v20210527-0259
    │   ├── org.eclipse.equinox.executable_root.gtk.linux.x86_64_3.8.1200.v20210527-0259
    │   ├── org.eclipse.equinox.executable_root.win32.win32.x86_64_3.8.1200.v20210527-0259
    │   ├── org.eclipse.platform.ide.executable.cocoa.macosx.aarch64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.ide.executable.cocoa.macosx.x86_64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.ide.executable.gtk.linux.aarch64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.ide.executable.gtk.linux.ppc64le_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.ide.executable.gtk.linux.x86_64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.ide.executable.win32.win32.x86_64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.cocoa.macosx.aarch64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.cocoa.macosx.x86_64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.gtk.linux.aarch64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.gtk.linux.ppc64le_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.gtk.linux.x86_64_4.20.0.I20210611-1600
    │   ├── org.eclipse.platform.sdk.executable.win32.win32.x86_64_4.20.0.I20210611-1600
    │   └── ...
    ├── buildInfo/reporeports/
    ├── features/
    │   ├── ...
    │   ├── org.eclipse.cdt.autotools_10.3.0.202104121328.jar
    │   ├── org.eclipse.cdt.build.crossgcc_10.3.0.202104042017.jar
    │   ├── org.eclipse.cdt.cmake_10.3.0.202106071842.jar
    │   ├── org.eclipse.cdt.debug.dap.gdbjtag_10.3.0.202104042017.jar
    │   ├── org.eclipse.cdt.debug.dap_10.3.0.202105191332.jar
    │   └── ...
    ├── plugins/
    │   ├── ...
    │   ├── org.eclipse.sdk_4.20.0.v20210611-1600.jar
    │   ├── org.eclipse.sdk_4.20.0.v20210611-1600.jar.pack.gz
    │   └── ...
    ├── artifacts.jar
    ├── artifacts.xml.xz
    ├── content.jar
    ├── content.xml.xz
    └── p2.index

Tycho plugins

GitHub - eclipse/tycho: Tycho project repository (tycho) Maven Tycho for building Eclipse plug-ins, OSGi bundles and Eclipse applications with the command line - Tutorial Tycho/FAQ - Eclipsepedia Tycho – Maven Site

The Maven Tycho build can be instructed to use p2 update sites, Maven repositories (as of Tycho 2.2.0) or Eclipse target platform definitions to search for dependencies.

  1. org.eclipse.tycho:target-platform-configuration => for platform definition
  2. org.eclipse.tycho:target-platform-configuration => OS environment
  3. org.eclipse.tycho:tycho-maven-plugin => The Tycho Maven Plugin provides extensions to build Eclipse projects. I.e. adds define phases in the lifecycle
  4. org.eclipse.tycho:tycho-compiler-plugin => Used to compile the OSGI bundles, coming from the target configuration
  5. org.eclipse.tycho:tycho-p2-repository-plugin =>
  6. org.eclipse.tycho:tycho-packaging-plugin => Packages the Eclipse OSGI bundle

Tycho Advanced by Dirk Fauth | vogella blog

Tycho uses the MANIFEST-first approach to resolve the dependencies

If this third-party-library is an OSGi bundle, and only in this case, Tycho is able to resolve such a dependency.

Target definition file resolver : TargetDefinitionResolver.resolveContentWithExceptions(TargetDefinition, IProvisioningAgent)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment