Describes the installation and usage of the Jalopy Maven 2.x Plug-in.
Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
The Maven homepage can be reached under http://maven.apache.org/
Explains the steps involved in getting the Maven 2.x Plug-in up and running.
The Plug-in requires Maven 2.0 or later. See Section 1.1, “System requirements” for the basic requirements to run Jalopy.
Please note that a different Plug-in is available for older Maven releases (see Chapter 11, Maven 1.x Plug-in).
The Plug-in comes as an executable Jar Archive (Jar) that contains a graphical setup wizard to let you easily install the software. Wizard installation is recommended and explained in detail in Section 1.3, “Wizard Installation”.
If you would rather install the Plug-in manually, you have to decompress and copy the appropriate files into the different application folders. To decompress the contents of the installer Jar, you can either use the Jar tool that ships with your Java distribution or any other software that can handle the ZIP compression format (e.g. 7Zip or WinZip).
If you're upgrading from a prior version and want to keep your settings, first
copy or rename the current Jalopy settings directory to match the version number
of the new release. For instance, if your current settings directory is
"C:\Documents and Settings\John
Doo\.jalopy\1.9" and you're about to install Jalopy
1.9.1, either copy the directory contents or rename it to
"C:\Documents and Settings\.jalopy\John
Doo\1.9.1". Wizard installation can perform this step
automatically.
First copy the Jalopy Maven Plug-in folder triemax from the
temporary directory into the Maven 2.x repository directory. This might either
be the local repository (e.g. "C:\Documents And Settings\John
Doo\.m2\repository\" on a Windows system) or the repository
directory of your internal repository in case you're using a shared repository
for your organization.
Copy the file jalopy-1.9.1.jar below the
triemax/jalopy/1.9.1/ folder in your Maven
repository, and jalopy-maven-1.9.1.jar from the
temporary directory into the
triemax/jalopy-maven/1.9.1/ folder of your Maven
2.x repository.
After all steps have been performed, you should have a folder structure like the following:
..
repository
[...]
triemax
jalopy
1.9.1-108
jalopy-1.9.1-108.jar
jalopy-1.9.1-108.pom
jalopy-maven
1.9.1-108
jalopy-maven-1.9.1-108.jar
jalopy-maven-1.9.1-108.pom
maven-metadata-local.xml
maven-metadata-central.xml
[...]
Although Jalopy ships with sensible default settings (mimicking the Sun Java coding convention), you most likely want to configure the formatter to match your needs (adding copyright headers, tune Javadoc handling and the like). For such, Jalopy comes with a graphical configuration tool that lets you interactively customize the settings. See Chapter 2, Configuration for an in-depth discussion of the available options.
To display the configuration tool, you should install the Console Plug-in and
use the matching wrapper script for your platform. The wrapper scripts are
called jalopy. and can
be found in the xxx/bin folder of the Console installation
directory.
Invoke the script with the --configure option.
% jalopy --configure
If you don't want to install the Console Plug-in, you can make use of the -jar option of the Java launcher, as Jalopy comes as an executable JAR file:
% java -jar <path_to>/jalopy-1.9.1.jar --configureOr you give the class path directly to the launcher
% java -cp <path_to>/jalopy-1.9.1.jar Jalopy --configure
Of course, you can externally configure the class path yourself by adding all
.jar files as usual and then type
% java Jalopy --configure
In order to integrate Jalopy into your build process, you need to edit your
pom.xml under the plugins section:
<project> [...] <plugins> <plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> [...] </configuration> <executions> <execution> <phase>process-classes</phase> <goals> <goal>format</goal> </goals> </execution> </executions> </plugin> [...] </plugins> </project>
This would execute Jalopy during the process-classes phase. Please note that you should always apply formatting after the compile phase has finished in order to ensure that the project is clean, but you're otherwise free to choose the phase that best suits your needs. For more information about the Maven build lifecycle, please refer to the "Maven Build Lifecycle Guide". It contains a reference of the available build phases.
If you don't want to have the format goal execute during the build, you simply don't bind the goal to a specific phase:
<project> [...] <plugins> <plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> [...] </configuration> </plugin> [...] </plugins> </project>
Formatting can be manually triggered from the command-line using either
% mvn triemax:jalopy-maven:format
or the shorthand
% mvn jalopy:format
Configuration
Naturally the Plug-in provides a few parameters to configure its behavior.
Table 12.1. Jalopy Maven Plug-in parameters
| Property | Type | Description | Since | Required |
|---|---|---|---|---|
| backup | Boolean | Sets whether backup copies of all processed Java source files should be kept. If omitted, the corresponding code convention setting will be used (see Section 2.2.2.2, “Backup”). | 1.7 | No |
| classpathElements | List | Defines the class path to use for type lookup. By default, the project class path (${project.compileClasspathElements}) is used. | 1.7 | No |
| convention | String | Sets the location of the code convention file to use - given either relative to the project's base directory or as an absolute local path or Internet address (refer to Section 2.1.1.7, “Importing” for information how to export your settings). If omitted and not specified otherwise (see "profile" below), the settings of the current profile are used. | 1.7 | No |
| destDir | String | Sets the destination directory to create/copy all formatting output into. If the given directory does not exist, it will be created. If omitted, all input files will simply be overridden. | 1.7 | No |
| encoding | String | Sets the encoding that controls how Jalopy interprets text files containing characters beyond the ASCII character set. Defaults to the platform default encoding. | 1.7 | No |
| environment | Map | Defines temporary environment variables overrides. | 1.7 | No |
| excludes | List | A list of exclusion filters. Uses the standard Maven pattern syntax. Please note that Jalopy ignores all files it cannot format by default, so exclusions are only necessary if you want to omit formatting for certain files, like e.g. test data files etc. | 1.7 | No |
| failOnError | Boolean | Sets whether a run should be held if errors occurred. Defaults to "true". | 1.7 | No |
| fileFormat | String | Sets the file format of the output files. The file format controls what end of line character is used. Either one of "UNIX", "DOS", "DEFAULT" or "AUTO" can be used (case insensitive). Defaults to "AUTO". | 1.7 | No |
| force | Boolean | Sets whether the formatting of files should be forced, even if a file is up-to-date. Defaults to "false". | 1.7 | No |
| fork | Boolean | Sets whether the processing should be performed in a separate VM. Defaults to "false". | 1.7 | No |
| history | String | Sets the history policy to use. Either one of "ADLER32", "CRC32" or "NONE" can be used (case insensitive). If omitted, the corresponding code convention setting will used (see Section 2.2.2.1, “History”). | 1.7 | No |
| includes | List | A list of inclusion filters for formatting. Uses the standard Maven pattern syntax. Please note that Jalopy ignores all files it cannot format by default, so inclusions are only necessary if you want to omit formatting for certain files, like e.g. test data files etc. | 1.7 | No |
| inputEncoding | String | Sets the encoding that controls how Jalopy interprets text files containing characters beyond the ASCII character set. Defaults to the platform default encoding. Please note that this setting always overrides encoding. | 1.7 | No |
| javadoc | String | Indicates whether Javadoc related messages should be printed. Defaults to "true". | 1.7 | No |
| logLevel | String | Specifies the logging level for message output. Either one of "ERROR", "WARN", "INFO" or "DEBUG" can be used (case insensitive). If omitted, the current code convention settings will be used (see Section 2.6.1, “Categories”). | 1.7 | No |
| logFile | String |
Specifies the log file to use for logging output. The format of the logging
output is determined by the extension of the given file. Valid extensions are
".log" for a custom plain text format,
".xml" for a plain XML format and
".html" for a hierarchical HTML
report. If omitted, the current code convention setting will be used
(see Section 2.6.2, “Logging”).
| 1.7 | No |
| outputEncoding | String | Sets the character encoding Jalopy uses to write files. Defaults to the platform default encoding. Please note that this setting always overrides encoding. | 1.7 | No |
| profile | String | Sets the Jalopy profile that should be used during the formatting run (refer to the section called “Main window” for more information about profiles). The currently active profile will be restored after formatting. Please note that if no convention is specified, the profile must exist! | 1.7 | No |
repository | Boolean | Indicates whether the disk-based type repository should be used for type lookup. You may want to disable the disk-based type repository if you commonly format a single file or only a small set of files in order to avoid the maintenance overhead of the type repository. Defaults to "true". | 1.7 | No |
| sources | List | The source directories containing the sources to be formatted. When omitted, uses the directories defined for the compiler (${project.compileSourceRoots}) instead. | 1.7 | No |
| test | Boolean | Sets whether formatting output should actually be written to disk. If set to "true" no output will be written to disk. The default is "false". | 1.7 | No |
| threads | Integer | Specifies the number of processing threads to use. Integer between
1 - 8. Defaults to "1".
| 1.7 | No |
To configure the Plug-in, you specify elements named after the available parameters where the contents of an element is the value to be assigned to the parameter.
<plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> <threads>4</threads> <profile>test</profile> </configuration> [...] </plugin>
For parameters of type List you would use multiple element tags to add the different values to the list.
<plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> <includes> <include>com/foo/siri/**</include> <include>com/foo/lana/**</include> </includes> <excludes> <exclude>**/*.sqlj</exclude> <exclude>**/*Test/**</exclude> </excludes> [...] </configuration> </plugin>
Configuring Maps works similar: elements are named after the keys and the element contents is the value to be assigned to the key.
<plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> <environment> <lead>John Doo</lead> <office>Alta Nova</office> </environment> [...] </configuration> </plugin>
For a complete example, please refer to Section 12.4, “Example” below.
Below you find a complete POM that performs formatting after each compile run finished successfully, disables logging of Javadoc related messages, only displays messages with warning severity or higher, activates the profile "test" during formatting and imports a code convention from a shared server. Formatting is applied to all Java source files of the project that are not located below the "testdata" folder.
Example 12.1. Maven POM
<project> <modelVersion>4.0.0</modelVersion> <groupId>testing</groupId> <artifactId>test</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>triemax</groupId> <artifactId>jalopy-maven</artifactId> <configuration> <javadoc>false</javadoc> <logLevel>warn</logLevel> <convention>http://tools/jalopy/config/foo.xml</convention> <sources> <source>/work/foo/main/src/java</source> <source>/work/foo/test/src/java</source> </sources> <includes> <include>**/*.java</include> </includes> <excludes> <exclude>**/testdata/**</exclude> </excludes> <environment> <lead>John Doo</lead> <office>Alta Nova</office> </environment> </configuration> <executions> <execution> <phase>process-classes</phase> <goals> <goal>format</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
