Compatible Runners

Works with any runner

Linters

N/A

Commands

N/A

Description

This preset allows you to use crafty within a Maven build (with frontend-maven-plugin). This will discover you pom.xml and get the right folder in target for you.

You can use it either with Webjars or Webapps.

Installation

npm install @swissquote/crafty-preset-maven --save
module.exports = {
  presets: ["@swissquote/crafty-preset-maven"],
  mavenType: "webapp" // or "webjar"
};

Usage

The destination directory is calculated using crafty-preset-maven and the mavenType option.

You can set the destination path manually but it’s recommended to change the mavenType of your bundle to either webapp or webjar instead.

This is the default for each:

  • webapp: ${project.build.directory}/${project.build.finalName}/resources
  • webjar: ${project.build.outputDirectory}/META-INF/resources/webjars

This preset’s role is to replace config.destination which is used to create the destination for each bundleType (destination_js, destination_css …)

Example

If we take the following configuration:

module.exports = {
    presets: [
        "@swissquote/preset-maven",
        "@swissquote/crafty-preset-babel",
        "@swissquote/crafty-runner-webpack"
    ],
    mavenType: "webjar",
    js: {
        library: {
            source: 'js/index.js',
        }
    }
}

The path of the final file will be :

                                                       ↓ "js" or "css" is added depending on bundle type
<maven_root>/target/classes/META-INF/resources/webjars/js/library.min.js
             ↑ Default path for webjars                   ↑ Inferred from the bundle name

Override destination with an environment variable

If your build is running from within Maven, it’s pointless to re-calculate the destination path, you can pass it using the TARGET_BASEDIR environment variable.

This is how to do it in frontend-maven-plugin

<plugin>
   <artifactId>frontend-maven-plugin</artifactId>
   ...
   <configuration>
      ...
      <environmentVariables>
         ...
         <!-- This values is for webapps -->
         <TARGET_BASEDIR>${project.build.directory}/${project.build.finalName}</TARGET_BASEDIR>

         <!-- This value is for webjars -->
         <TARGET_BASEDIR>${project.build.outputDirectory}</TARGET_BASEDIR>
      </environmentVariables>
   </configuration>

   ...
</plugin>

Options

Option Type Optional ? Description
mavenType String No Must be "webjar" or "webapp" decides where to put the files.