Kyle Lieber

some things I felt like writing about...

Sep 21, 2018 - 3 minute read - Development

Generate OpenAPI Specs with Spring REST Docs

Many of the teams at my organization began using Spring REST Docs to document our REST APIs over the last couple of years. We really like the freedom it gives you to design your documentation as you wish while still giving you reliable snippets that are validated through tests. Of course, the only thing its missing is the ability to generate an API specification document like OpenAPI. This recently became a requirement that we are able to provide such a document so many thought we would need to abandon Spring REST Docs.

Apr 11, 2016 - 2 minute read - Development

Angular transclude directive and ng-if

As I continue to dive further and further into Angular development it never ceases to amaze me how quickly I can get tripped up by directives. This is just something I learned last week about using a custom transclude function and an ng-if on a directive.

May 2, 2014 - 2 minute read - Development

PhantomJS Maven Plugin 0.3

I just released version 0.3 of the phantomjs-maven-plugin and I thought it was about time I wrote a blog post about this project.

PhantomJS is a headless WebKit implementation that is extremely useful for tasks like headless website testing, screen capture, page automation, network monitoring, and more. Much of my experience with PhantomJS comes from my work on the jasmine-maven-plugin. In version 1.3.1.1 of the plugin we added support for using PhantomJS instead of HtmlUnit to execute Jasmine specs. The only downside to using PhantomJS with the plugin is that you had to have PhantomJS already installed on your system. For those of us in the Maven world that seems a little odd since Maven is suppose to download all of our dependencies for us. But of course, usually those dependencies are platform-independent java libraries. PhantomJS, on the other hand, requires install platform-dependent compiled binaries. `` Well after a few months of explaining to users and friends that they needed to have PhantomJS pre-installed and there was no good way to have it installed automatically, I decided I need to fix that. So, I took some inspiration from the work done on the Arquillian Phantom Driver and wrote the phantomjs-maven-plugin.

Mar 12, 2013 - 2 minute read - Development

Jasmine Maven Plugin 1.3.1.0 - My First Release

I began using the the Jasmine Maven Plugin in June of 2012 and was immediately impressed with how well it worked and how easy it made automating my test execution. Soon after I discovered require.js and decided to begin using it in my applications. I learned quickly however that the require.js support in the Jasmine Maven Plugin had quite a few issues and so I decided to try and help fix some of them. Fast-forward to January of this year and I found myself a maintainer of the plugin with full commit access and a huge list of issues (thank you Justin Searls for the opportunity). I’ve had a few goals for my first release:

Jun 25, 2012 - 7 minute read - Development

Maven Versioning Strategy

I’ve been having a lot of discussions with analysts in my organization about how to version software using Maven and I’m finding there is a common misconception about what SNAPSHOT actually means. I’ve been looking for a good blog to send them that helps explain versioning in Maven but unfortunately everything I’ve found merely discusses version formats and not how to use them as you’re developing an application. So, I decided I would take a stab at it. I welcome any comments and constructive criticism that will help me improve this document, so please feel free. First off, a SNAPSHOT is not the same thing as an alpha/beta/etc version. It is a special keyword that means it is the latest version of your code. This means it changes. If you pulled down someapp-1.0-SNAPSHOT yesterday and then you try to pull it down today it will most likely not be the same. This also means if you have a project dependent on a SNAPSHOT version, maven will need to check the remote repository for changes every time you run a build.