eclipse oxygen (4.7) for the mac

eclipse.org went with a mountain peaks as the website theme for the release of Oxygen. I like it; lower Oxygen concentration when hiking at that altitude. And unlike the neon lights, it wasn’t distracting.

The matrix comparing the packages is still clear. The Java version is a subset of the Java EE version. I chose the later since it has the JavaScript tools built in. This year the list of Eclipse packages has JRebel as the second choice (sponsored package) instead of Bluemix. I saw a Bluemix ad for running Eclipse in the cloud so IBM is still paying as well.

Installing

I like to download and install a fresh Eclipse so I don’t have random plugins I’ve tried throughout the year. An in place upgrade is an option from Neon to Oxygen though. (it wasn’t a choice from Mars to Neon because of an architectural change). Unlike Neon, it was just a drag to install rather than an installer. Which means I can have both Neon and Oxygen installed at the same time.

When opening my workspace with Oxygen, I got this error:


eclipse.buildId=4.7.0.I20170612-0950

java.version=9-ea

java.vendor=Oracle Corporation

BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US

Framework arguments:  -product org.eclipse.epp.package.jee.product -keyring /Users/nyjeanne/.eclipse_keyring

Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -keyring /Users/nyjeanne/.eclipse_keyring

!ENTRY org.eclipse.osgi 4 0 2017-07-01 14:38:33.909

!MESSAGE Application error

!STACK 1

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javax/annotation/PostConstruct

The cause was that I have Java 9 early access JDK on my machine. I tried adding these two lines to the

/Applications/Eclipse.app/Contents/Eclipse/eclipse.ini and then Eclipse launched cleanly.


-vm

/Library/Java/JavaVirtualMachines/jdk1.8.0_xx.jdk/Contents/Home/bin

After installing plugins and restarting Eclipse, this config “got lost” and I had to make it again.

 

Installing the plugins

The significant plugins I chose to re-install are listed in this table. eGit, Buildship (for Gradle), m2e (Maven) and I think EclEmma were already installed without me doing anything.

Plugin Purpose
Eclipse Tomcat Plugin One click launch for recent versions of Tomcat. (This is the successor to Sysdeo and Mongrel)

Problem/resolution

I got an error Unable to read repository at http://tomcatplugin.sf.net/update/content.xml. Received fatal alert: handshake_failure. I got hit by these known issues. I had to do a few things here:

  1. Upgrade my JDK to the latest (8.131)
  2. Change the eclipse.ini to reference it
  3. Download the cryptography jars
  4. Copy into jre/lib/security directory (remember to sudo)cd /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/securitysudo cp <download_path>/*.jar .
  5. Restart Eclipse
EclEmma Code coverage (I’m pretty sure this was already installed and I didn’t need to). I did need to close and re-open the Coverage view in my workspace.

9/3/17 – Confirmed it was already installed. I needed to install clean on a WIndows 10 box so saw it was on there.

SonarLint  I installed SonarLint last year and quickly came to rely on it. It gives you static analysis findings in Eclipse. I also included the SonarLint Java Configuration Helper so it can see the version of Java I am using. (I”m on Java 8 right now so this is redundant at the moment. But I’m ready for when Java 9 comes out.) I stopped installing PMD and FindBugs. I’m using SonarLint instead.
Subversive To access Subversion repositories

Problem/Workaround

Eclipse failed/closed the pop-up when I tried to install a connector. This happened regardless of whether I choose SvnKit or JavaHL I can reproduce the same problem in a clean workspace. There’s no message in the log from that attempt. Others have reported this issue online with the SVN connector, but no resolution yet.

I tried installing Subclipse instead. That worked. I had to re-checkout the projects since they were associated through Subversive originally.

Eclipse Memory Analyzer For finding memory leaks. Unlike last year with Neon, it installed cleanly from Eclipse Marketplace.
Freemarker IDE Freemarker syntax highlighting and macro assistance.

Failed install

Freemarker IDE from JBoss Tools 1.5 says it supports Oxygen. When downloading, I got the error No repository found at http://download.jboss.org/jbosstools/neon/snapshots/builds/jbosstools-freemarker_master/latest/all/repo.

Last year, it was under the JBoss Tool Project. I couldn’t find that this year. Also, last year, I had to use the Mars version because it wasn’t ready on day 1.

I tried opening a .ftl file. I got a popup asking if want to “Show IDE extensions for this file type and let me install them”. There were two choices. The Freemarker IDE 1.5 and RedHat JBoss Developer Studio which doesn’t look free.

Pydev Python plugin/perspective
Contrast To spot potential security issues. See my impressions of the Contrast plugin.
Bytecode Outline I’ve been looking at bytecode a good fit for the book to make sure I understand why things are happening. This plugin makes it easy. I first tried Bytecode Visualizer but install failed. (The website says there were 25 failed installs with the same dependency problem in the last 7 days). After installing Bytecode Outline, I realized this was the one I had installed for Luna anyway.
Pitclipse For mutation testing coverage

Java 9

Since Java 9 comes out (in Sept) after the Eclipse train (in June), there is a page that describes what to do if you want Java 9 support in your IDE. I’m waiting for the official release. For now, I’m good with just using the command line for Java 9. Eclipse Oxygen is going to drop another official release on Java 9 release day with Java 9 support.

What excites me

  1. Sorting breakpoints by creation time is nice when debugging in a web app. I tend to forget about the breakpoints once something is working and then have to figure out which ones I want to keep. Since the answer is “the recent ones” this is nice.
  2. When switching workspaces from within Eclipse, there’s an option to copy your preferences. This is great as my previous scheme was copying the workspace and deleting all the projects. (to keep preferences)
  3. The default option to escape characters when pasting in a String. This isn’t a new feature, but I wasn’t aware of it.
  4. The option to skip an import on organize imports. This is great because now you can skip a class with a common name and get the import for later classes referenced that are in that package.
  5. The new button to see the JUnit stack trace in console view. I used to copy/paste it into a text editor and that is no longer necessary.

What I didn’t like

  1. That all my plugins didn’t work out of the box 🙁

Other interesting features

  1. Being able to open images directly in Eclipse is cool. So now you can see the size and image without leaving the IDE. It doesn’t show the height/width though so limited in value.
  2. The new row in the debugger with the return value of the last method called is cool.
  3. Not new to Eclipse Oxygen, but I learned about formatting line breaks.

live blogging from qcon new york

Monday

Tuesday

Wednesday

Random info about the conferenece

  • Each track has an open space.
  • 5 editorial tracks and one sponsor track
  • Different tracks each day
  • 130 speakers
  • 900 attendees
  • Hallway track – 25 minutes between sessions so time to talk
  • Badges are shorter with names bigger so easier to see name
  • Have a white lanyard you can wear to optout of photos
  • Healthy food – gulten free and vegan options
  • Vote green/yellow/red after each session. If go online, can see how you voted and provide text feedback.
  • Track preview so you gt. 30 second glance at each session and can pick better

automated testing for digital experiences using junit 5 – live blogging from spring days

Automated Testing for Digital Experiences Using JUnit 5
Speaker: Justin Baumgartner
See list of all blog posts from conference

General

  • Asked how many use JUnit 4. Almost everyone. [didn’t ask about TestNG, but did cite most used framework in general]
  • JUnit 4 is ten years old
  • “It’s all about the tests” – TDD/CI/CD – create. more importance on tests

Gaps in JUnit 4

  • Tight coupling between the APIs we use to write tests and the ones build tools use. Separating the jars lets progress at different speeds
  • Built on Java 5. Can’t use lambdas [aside from a tiny bit in assertj]
  • Runner restrictions – can only have one
  • Rules aren’t flexible enough

JUnit 5

  • Release in early fall
  • New architecture: JUnit platform (for build tools and IDEs to discover and execute tests), JUnit Jupiter (for writing tests), JUnit Vintage (to run legacy tests)
  • Potential for Cucumber or Spock runner so can run all tests in one place
  • Extension model: Can hook into life cycle callbacks. Used instead of runners/rules. An extension point is an interface. Example BeforeEachCallback. Need to be stateless; get TestExtensionContext as parameter. Can implement multiple callback if want called multiple times and store state in getStore(context).
  • Can pass parameters into test methods using @ExtendWith(xxx.class) so narrow scope. Implement ParameterResolver to create the object you want to mock.
  • Dynamic tests: create tests at runtime. Not expected to use often. @TestFactory and then create tests as lambdas. Each dynamicTest in list is an actual test (vs run in a loop
  • @ParmeterizedTest and @ValueSources – hard code parameters, read from file. [need to look at how to run “legacy” style parameterized test – answer – there’s. a @MethodSource where you can havve any logic]
  • RepeatedTest(x) – to run test a bunch of times
  • @Disabled – can disable class or test. Appear in report but not run. (unlike @Ignore where don’t appear in report at all)
  • @DisplayName so can print clearer name than test name
  • @Tag – replaces @Category – to grou/filter tests
  • assertAll() – new assertion – facilitates grouping of assertions

Said backward compatible. But not all runners/rules are in Jupiter. So would have to use Vintage test engine to use those or port. Jupiter has different packages for annotations/assertions so can mix within class. So if using Jupiter engine, still can use “old” asserts until change imports.

Nice ending presentation. I’m really excited about JUnit 5!