blob: e39cc328db9975ff4b55c97441d603be63ca16ba [file] [view]
---
layout: website-normal
title: IDE Setup
toc: /guide/toc.json
---
Gone are the days when IDE integration always just works... Maven and Eclipse fight,
neither quite gets along perfectly with Groovy,
git branch switches (sooo nice) can be slow, etc etc.
But with a bit of a dance the IDE can still be your friend,
making it much easier to run tests and debug.
As a general tip, don't always trust the IDE to build correctly; if you hit a snag,
do a command-line ``mvn clean install`` (optionally with ``-DskipTests`` and/or ``-Dno-go-client``)
then refresh the project.
See instructions below for specific IDEs.
## Eclipse
The default Eclipse downloads already include all of the plugins needed for
working with the Brooklyn project. Optionally you can install the
Groovy and TestNG plugins, but they are not required for building the project.
You can install these using Help -> Install New Software, or from the Eclipse Marketplace:
{% read eclipse.include.md %}
As of this writing, Eclipse 4.5 and Eclipse 4.4 are commonly used,
and the codebase can be imported (Import -> Existing Maven Projects)
and successfully built and run inside an IDE.
However there are quirks, and mileage may vary. Disable ``Build Automatically``
from the ``Project`` menu if the IDE is slow to respond.
If you encounter issues, the following hints may be helpful:
* If m2e reports import problems, it is usually okay (even good) to mark all to "Resolve All Later".
The build-helper connector is useful if you're prompted for it, but
do *not* install the Tycho OSGi configurator (this causes show-stopping IAE's, and we don't need Eclipse to make bundles anyway).
You can manually mark as permanently ignored certain errors;
this updates the pom.xml (and should be current).
* A quick command-line build (`mvn clean install -DskipTests -Dno-go-client`) followed by a workspace refresh
can be useful to re-populate files which need to be copied to `target/`
* m2e likes to put `excluding="**"` on `resources` directories; if you're seeing funny missing files
(things like not resolving jclouds/aws-ec2 locations or missing WARs), try building clean install
from the command-line then doing Maven -> Update Project (clean uses a maven-replacer-plugin to fix
`.classpath`s).
Alternatively you can go through and remove these manually in Eclipse (Build Path -> Configure)
or the filesystem, or use
the following command to remove these rogue blocks in the generated `.classpath` files:
{% highlight bash %}
% find . -name .classpath -exec sed -i.bak 's/[ ]*..cluding="[\*\/]*\(\.java\)*"//g' {} \;
{% endhighlight %}
* You may need to ensure ``src/main/{java,resources}`` is created in each project dir,
if (older versions) complain about missing directories,
and the same for ``src/test/{java,resources}`` *if* there are tests (``src/test`` exists):
{% highlight bash %}
find . \( -path "*/src/main" -or -path "*/src/test" \) -exec echo {} \; -exec mkdir -p {}/{java,resources} \;
{% endhighlight %}
If the pain starts to be too much, come find us on IRC #brooklyncentral or
[elsewhere](/website/community) and we can hopefully share our pearls.
(And if you have a tip we haven't mentioned please let us know that too!)
## IntelliJ IDEA
To develop or debug Brooklyn in IntelliJ, you will need to ensure that the Groovy and TestNG plugins are installed
via the IntelliJ IDEA | Preferences | Plugins menu. Once installed, you can open Brooklyn from the root folder,
(e.g. ``~/myfiles/brooklyn``) which will automatically open the subprojects.
Brooklyn has informally standardized on arranging `import` statements as per Eclipse's default configuration.
IntelliJ's default configuration is different, which can result in unwanted "noise" in commits where imports are
shuffled backward and forward between the two types - PRs which do this will likely fail the review. To avoid this,
reconfigure IntelliJ to organize imports similar to Eclipse. See [this StackOverflow answer](http://stackoverflow.com/a/17194980/68898)
for a suitable configuration.
## Netbeans
Tips from Netbeans users wanted!
## Debugging Tips
To debug Brooklyn, you have 2 solutions:
1. **Launch the REST server + each UI module manually**
Create a launch configuration which launches the ``BrooklynJavascriptGuiLauncher`` class. This will launch only the REST API.
If you need the UI on top of it, you can create launch configuration for each of the UI module by calling `npm run start`.
See `README.md` files on each UI modules for more information about this.
2. **Launch the fully built karaf distribution, attached to a Java debugger**
First, you need to build the entire project. Then, create a launch configuration that will execute `brooklyn-dist/karaf/apache-brooklyn/target/assembly/bin/karaf`
and have the following Java Options: `JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8888,server=y,suspend=y`.
Create a second launch configuration to start the remote debugger on port `8888`. When you start the first launch configuration,
it will wait for the Java remote debugger to start. At that point, start the second launch configuration, the first will then
resume as usual. This will give you a fully built Brooklyn including REST server and UI.