npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-tomcat-developer

v0.4.0

Published

Grunt plugin to serve a webapp using tomcat

Downloads

3

Readme

grunt-tomcat-developer

Grunt plugin that configures and controls a local tomcat instance to ease the development of java web applications.

The grunt-tomcat-developer plugin provides the ability to start, stop and restart a locally installed tomcat server for development use. It supports Tomcat 8 in its default setup, but can be configured for tomcat 7 or 6 with the compatibility option.

The task constructs a new catalina base directory by copying configuration files from a locally installed tomcat instance defined by the CATALINA_HOME environment variable which must be defined for the task to work.

The task configures a tomcat virtual webapp by automatically generating a context configuration that pulls in classpath entries without the need to copy any files. The classpath its self can be explicitly declared in the grunt configuration, or you can use the plugin grunt-maven-classpath to generate the classpath automatically from a maven project.

The task also support live reload of java classes through JRebel which requires a JRebel license.

Getting Started

This plugin requires Grunt ~0.4.5

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-tomcat-developer --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-tomcat-developer');

The "tomcat" task

Overview

In your project's Gruntfile, add a section named tomcat to the data object passed into grunt.initConfig().

grunt.initConfig({
  tomcat: {
    options: {
      // Task-specific options go here.
    }
  },
});

Options

options.docBase

Type: String Default value: 'build/webapp

This defines the directory that is is used as docBase of the tomcat context.

options.catalinaBase

Type: String Default value: '.tomcat'

This defines the directory that is used as the CATALINA_BASE directory.

options.javaOpts

Type: String Default value: ''

This defines the options passed to tomcat when starting up.

options.classpath

Type: Array Default value: []

This defines the classpath entries that the tomcat instance is configured with.

options.compatibility

Type: String Default value: 8

This defines the compatibility mode of the plugin and can be set to '8', '7' or '6' to define the version of tomcat in use.

options.tail

Type: boolean Default value: false

If true, the plugin will tail the catalina.out file generated by the tomcat instance and output contents to the grunt log asynchronously. Use with the watch task and see tomcat console output at the same time as watch output.

Usage Examples

To use the tomcat task, you must supply an additional argument that will be passed to the tomcat control script, typically start, stop and restart.

To start the tomcat instance:

grunt tomcat:start

To stop the tomcat instance

grunt tomcat:stop

To restart the tomcat instance

grunt tomcat:restart

Alternative locations

// Simple config to run tomcat with a docBase of `src/main/webapp` and
//  a classpath of `build/classes`
grunt.initConfig({
  tomcat: {
    options: {
      docBase: 'src/main/webapp'
      classpath: [
        'build/classes'
      ]
    }
  },
});

JARs in classpath

// Additional jar files added to classpath
grunt.initConfig({
  tomcat: {
    options: {
      docBase: 'src/main/webapp'
      classpath: [
        'build/classes',
        'lib/*.jar'
      ]
    }
  },
});

JARs from maven in classpath

// Additional jar files added to classpath
grunt.initConfig({
  tomcat: {
    options: {
      docBase: 'src/main/webapp'
      classpath: [
        'build/classes',
        'lib/*.jar',
        '~/.m2/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar'
      ]
    }
  },
});

Larger Heap

// Larger heap specified in javaOpts
grunt.initConfig({
  tomcat: {
    options: {
      docBase: 'src/main/webapp',
      javaOpts: '-Xmx1024m'
      classpath: [
        'build/classes',
        'lib/*.jar'
      ]
    }
  },
});

Live reload

The plugin supports livereload of java classes and resources with JRebel, this requires a license, 30 day trials are available and full details are found on the JRebel website.

To use JRebel support:

  1. Run tomcat via the plugin at least once so that the catalina base directory is created.
  2. Download JRebel standalone and unzip into the CATALINA_HOME directory, you should have a directory named jrebel containing a jrebel.jar file within CATALINA_HOME.
  3. Descend into jrebel/bin and activate JRebel by running jrebel-activation.jar
  4. You are good to go. Launch tomcat, modify java source code and classes will be instantly and automatically reloaded.
// Additional jar files added to classpath
grunt.initConfig({
  tomcat: {
    options: {
      docBase: 'src/main/webapp',
      jrebel: true,
      classpath: [
        'build/classes',
        'lib/*.jar'
      ]
    }
  },
});

Maven classpath

This task is designed to work along with the grunt plugin grunt-maven-classpath which makes it possible to setup the tomcat instance to use the a Maven project classpath.

The grun-maven-classpath plugin determines the classpath of a maven project and saves it to a json file, which can then be loaded and referenced as the classpath by grunt-tomcat-developer.

tomcat: {
  options: {
    docBase: 'target/webapp',
    classpath: grunt.file.readJSON('classpath-tomcat.json'))
  }
},

maven_classpath: {
  tomcat: {
    options: {
      ...
    }
  }
},

Then run the grunt-maven-classpath:tomcat task, followed by tomcat:start and tomcat will be configured with the maven classpath.

To add additional items to the classpath you may concatenate the generated classpath with some custom additions like below.

tomcat: {
  options: {
    docBase: 'target/webapp',
    jrebel: true,
    classpath: [
      'target/classes/'
    ].concat(grunt.file.readJSON('classpath-tomcat.json')),
  }
},

And with grunt-maven-classpath its possible to override some maven dependencies so that the latest in development code for a library can be loaded rather from a packaged JAR stored in the maven local repository.

tomcat: {
  options: {
    docBase: 'target/webapp',
    jrebel: true,
    classpath: [
      'target/classes/'
    ].concat(grunt.file.readJSON('classpath-tomcat.json')),
  }
},

maven_classpath: {
  tomcat: {
    options: {
      overrides: [
        artifactId: 'my-library',
        overridePath: '/Users/bob/git/my-library/target/classes/'
      ]
    }
  }
},

Release History

  • 2015-10-13 v0.4.0
    • Allow restart command even if instance is not running
    • Tail option to send tomcat console output to the grunt log
  • 2015-10-01 v0.3.0
    • Use tomcat virtual webapp features to build classpath
    • Support jrebel installation in CATALINA_HOME
    • Fix concurrency issue when used with watch
    • Documentation fixes and improvements
  • 2015-09-30 v0.2.1  
    • Fixed repo urls
  • 2015-09-29 v0.2.0   
    • JRebel support
    • Restart command
  • 2015-09-27 v0.1.0
    • Initial release