# JDT structure and API

Given that the JDT supplies a full featured Java IDE, why would you need to use the JDT API?

If you are building a plug-in that interacts with Java programs or resources as part of its function, you may need to do one or more of the following things:

- Programmatically manipulate Java resources, such as creating projects, generating Java source code, performing builds, or detecting problems in code.
- Programmatically launch a Java program from the platform
- Provide a new type of VM launcher to support a new family of Java runtimes
- Add new functions and extensions to the Java IDE itself

If you want to use JDT API in your plug-in, you must include the JDT plug-ins as prerequisites in your plug-in.xml.

- org.eclipse.jdt.core is the plug-in that defines the core Java elements and API. You should always list this plug-in as a prerequisite.
- org.eclipse.jdt.ui is the plug-in that defines the Java UI API. You should list this plug-in as a prerequisite if you are using the JDT UI classes.
- org.eclipse.jdt.junit is the plug-in that defines the JUnit integration API. You should list this plug-in as a prerequisite if you are using the JUnit integration classes.
- org.eclipse.jdt.launching is the plug-in that defines the Java launching and runtime support. You should list this plug-in as a prerequisite if you need to launch Java virtual machines programmatically.
- org.eclipse.jdt.debug is the plug-in that defines the Java debug model. You should list this plug-in as a prerequisite if you need to programmatically access objects in a program being debugged.
- org.eclipse.jdt.debug.ui is the plug-in that defines the Java debug UI extensions. You should list this plug-in as a prerequisite if you need to programmatically access the prompting source locator or Java launch configuration tabs.