ant and junit5 – simulating sysproperty

Main menu:

Topics

Recent Posts

Feeds

RSS Feed RSS - Posts

July 2018
M T W T F S S
« Jun    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Past Posts

Java/Java EE

JDBC

Other

ant and junit5 – simulating sysproperty

July 15th, 2018 by Jeanne Boyarsky

In JUnit 5, you use the junitlauncher Ant task rather than the junit Ant task. Unfortunately, this isn’t a drop in replacement. For example, junitlauncher doesn’t offer the option to fork and run the JUnit tests. As a result, it also doesn’t have the nested sysproperty tag so you can pass system properties. This is a problem.

For the CodeRanch, we set a system property for the default file encoding. Since developers are around the world, we can’t assume everyone “just has” the encoding set.

Disclaimer

Since JUnit 5 functionality for Ant was introduced this year, I’m hoping what I did in this post is a short term workaround.

Option 1 – pass to Ant

You can pass the the properties to Ant itself as described on Stack Overflow. For example:

__JAVA_OPTIONS=-Dfile.encoding=ISO8859_1

pros:

  • simple

cons:

  • subpar – all the developers need to remember to do this. The reason we had it in Ant in the first place is so folks wouldn’t need to remember
  • for some use cases, the desired system properties could be derived and not know when calling Ant

Option 2- Nashorn Code

Since JUnit 5 is being run in the same process as Ant itself, you need to set the system property in memory. Luckily, Ant allows you to run scripting in various languages. I chose Nashorn because it is built into Java. (There are other variants of this; see below)

<script language="javascript">
  <![CDATA[
    var imports = new JavaImporter(java.lang.System);
    imports.System.setProperty('file.encoding', 'ISO8859_1')
  ]]>
</script>

Pros

  • Short and simple
  • Nashorn is deprecated for removal starting Java 11. This means at some point, it can be removed. (I’m hopeful that the Ant task itself will support system properties by then.

Cons

  • Requires Java 8 or higher
  • The System property is set for the remainder of the build (you could write another code block to null it out after the test if this is a problem)

Variants of option 2

If you are running Ant with a version of Java below Java 8, you could use this technique, but use Rhino instead. I didn’t test this, but I think the code is


importClass(java.lang.System);
System.setProperty('file.encoding', 'ISO8859_1')


JUnit 5 itself uses Java 8 so nobody would be in the situation of pre-Java 8 and trying to use this blog post.

If you are running Ant with a version of Java where Nashorn has been removed, you could use Groovy or Jython as the embedded language. The code is simpler. I didn’t chose this because it requires adding another jar to the Ant directory. I prefer to minimize these set up extensions. Especially for a feature like this which is likely to be temporary.

System.setProperty('file.encoding', 'ISO8859_1')

jeanne conference speaking

July 1st, 2018 by Jeanne Boyarsky

Last year, I started speaking at conferences more. Before that, I did a lot of “applying to speak at conferences without getting accepted.”

In December 2016, one of the speakers at the NY Java SIG cancelled. Frank Greco asked some of us regulars if we could speak (on a few days notice.) I sent a list of topics I could speak about. One was mutation testing. I did a great job and Frank recorded it on YouTube. Being able to include that in my speaking proposals made a difference. Or there was a strong correlation. Who knows.

Once I started speaking more, I was able to establish a good reputation.

Last week, at QCon, I got 94% green:

And I’m listed on the featured speaker page for Oracle Code One.

I enjoy presenting. I joined Toastmasters to get better at relaying technical information in an engaging/entertaining way. I think I’ve succeeded.

eclipse photon (4.8) for the mac

July 1st, 2018 by Jeanne Boyarsky

eclipse.org went with a mountain peaks as the website theme for the release of Photon. Fun and fitting. The Eclipse site prompted me about the cookie use policy. Another change since last year, but not unexpected.

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. Unlike the last few years, a sponsored/commercial version wasn’t featured prominently. In fact, I didn’t notice one at all. Vaadin and JRebel do show as sponsored/promoted plugins in Eclipse Marketplace though so no risk forgetting about them!

Installing

I like to download and install a fresh Eclipse so I don’t have random plugins I’ve tried throughout the year. I downloaded the installer first which is a nice small, well relatively small, (55MB) file. I choose “Eclipse IDE for Java EE Developers” and an installation folder. This took a few minutes. I saw messages go by about it being slower than usual to download Eclipse plugins from various servers. Presumably because Photon has only been out a few days and lots of people are downloading.

I got a prompt from Oomph to accept /plugins/org.eclipse.rse.ui_3.3… as unsigned content. I accepted, but was a little surprised.

Then I was able to open Eclipse

 

Installing the plugins

Already installed were:

  • m2e (maven)
  • BuildShip (gradle)
  • EclEmma (code coverage)
  • JUnit (3, 4 and 5)
  • eGit (git)

The significant plugins I chose to re-install are listed in this table.

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 a PKIX error. But clicking through it still allowed me to install so I didn’t have to update the certs or anything.

Unable to read repository at https://devtools.his.de/tomcatplugin/updatesite/content.xml.

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

This is a known issue. In my case, it was caused by the eclipse.ini automatically picking up my Java 11 early access install. After changing it to point to Java 8, things went better. This allowed it to pick up the cryptography jars and work as expected.

SonarLint I reply heavily on SonarLint. 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.)
Subclipse I trouble with Subversive in Eclipse Oxygen so I switched to Subclipse. Since my workspace uses Subclipse now, it is easier to say with it than switch back. I’m fine with using either.
Eclipse Memory Analyzer For finding memory leaks.
Freemarker IDE Freemarker syntax highlighting and macro assistance. Unlike with Eclipse Oxygen, this worked on the first install attempt.
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. The version number has hex towards the end; maybe the number from github?
Pitclipse For mutation testing coverage

 

What excites me

  1. When searching using open resource/type, exact matches take precedence (vs files you looked at with similar name.) Also, it now shows the path in the workspace regardless of whether the filename is a duplicate. Both are nice usability improvements.
  2. The UI changed for the debugger. I like that you can see more variables in the debugger view without having to scroll or resize the window.
  3. There’s now a workspace option to “Sort library entries alphabetically in Package Explorer”. This makes it easier to find things than the default order (which is the classpath.)

What I didn’t like

  1. On Mac, the default font changed from Monaco to Menlo so keywords show in bold instead of just color. This was more of a “change is hard” thing. The first day, I didn’t like the new bolding. I wasn’t used to it so the keywords looked different. By the second day, I was used to it and it was just readable as the original. (I know I could have changed my workspace default back to Monaco if I continued to not like it).

Other interesting features

  1. Eclipse now supports Rust. I haven’t used it, but Rust is supposed to be an up and coming language.
  2. Eclipse supports Java 10 out of the box. Not that interesting because Java 10 came out in March. But good to know that Eclipse is staying current. I imagine there will be an Eclipse 4.8.1a in September or October for Java 11 support since Java 11 comes out in September. Eclipse did this for JUnit 5 so there is definitely precedent.
  3. JUnit 5 is included. This doesn’t excite me because I had been using 4.7.1a which also had JUnit 5 support. But if you are upgrading from the release a year ago, it is definitely exciting!