I like to create a simple command line application whenever I want to learn a new concept/product or when I’m trying to implement a complicated logic. I never actually work on command line projects – for several years now I’ve been exclusively working on web applications. But still my go to approach for implementing something new is to first try it out in a command line program and then when I am comfortable, write it into my web application. Isolating new attempts like this helps me keep a clear mind and learn the new concept in more depth. Also it’s much more efficient – otherwise, I have to load up the entire web application just to see whether my new approach worked.
Why Not Just javac
and java
Yes, it’s quite simple to just write a *.java file and compile it with javac
and run it with the java
command. But specifying and managing dependencies is a headache. Using a tool like Gradle or Maven would enable us to avoid that whole activity and focus on our project. So even for a one-file command line application, I will use something like Gradle.
Setup Gradle
If you have never initialised a Gradle project, chances are the you never had to install Gradle on your computer. The gradlew
command that is available in Gradle projects take care of downloading and installing the required version of Gradle for that project. Well now you are going to initialise a new project. You need a standard installation of Gradle to do this.
My preferred way to install Gradle is to use SDKMAN! Just sdk install gradle
and I have a clean installation of Gradle. After that do gradle -v
to check the version of Gradle installed. For this tutorial, it doesn’t matter much. If you’ve installed a relatively new version it’s fine.
Create A New Project
For this example, let’s create a project called test-project
. Steps to create a new project are –
- Create a directory – Open a terminal and type
mkdir test-project
and then switch into the new directorycd test-project
- Initialize a Gradle project – execute
gradle init
and then answer the questions that the script asks. For this project the answers would be –- Type of project is ‘application’. ‘basic’ is basically an empty project – we don’t want that. Choose ‘application’
- Implementation language is ‘Java’
- Split into sub projects – ‘no’. We just need a simple project.
- Build script DSL – ‘Groovy’. Selecting Kotlin doesn’t make much of a difference anyway. Being statically typed, Kotlin makes it easier for IDEs to do fancy things like auto-complete. But Groovy is quite fine for me for this project.
- Test framework – ‘JUnit Jupiter’. I like JUnit 5 (also called JUnit Jupiter)
- Project name – Accept the default – which is the directory name
test-project
. You can give a different name if you like. - Source package – If the project is never going to leave your computer, simply accept the default or type whatever you like. If you’re going to share it, it’s a good idea to put some unique string here. Real projects use their domain names to make package names unique –
org.apache.commons
etc.
Keep in mind about reserved keywords when you name things. Source package names like java.test
or try.newtech
etc. will fail. Because try
is a reserved keyword in java and java
itself is forbidden to be used in package names.
That’s it. You’ve made a neat little application for yourself to play with.
Run the Project
Simply execute ./gradlew run
to run your new little application. As of today, the default project prints out the string Hello World!
You can open this folder in your favourite text editor or IDE and go about making changes. The source code would be inside the app/src/main
directory.
Execute ./gradlew tasks
to see what tasks are available for you to run. If like me, you are doing this to do a trial implementation of some new algorithm or library, ./gradlew run
is all you need.
Get Cracking
Open the build.gradle
file in your project folder to add dependencies. Use the app/src/main/java/{{source-package}}/App.java
file as a starting point for your code.
Of course this is only one of the countless ways in which you could put together a stub project for trying out new things, but it’s a neat and simple way. And since it’s Gradle, pretty much all of your dependencies are easy to add into your project. And you don’t have to suffer with a bulky big project while you are trying to learn your new technology or implement your new idea.