mvn clean package
Package a Mule Application
Standard Support for Mule 4.1 ended on November 2, 2020, and this version of Mule reached its End of Life on November 2, 2022, when Extended Support ended. Deployments of new applications to CloudHub that use this version of Mule are no longer allowed. Only in-place updates to applications are permitted. MuleSoft recommends that you upgrade to the latest version of Mule 4 that is in Standard Support so that your applications run with the latest fixes and security enhancements. |
You can package your Mule applications using Mule Maven Plugin(command line) or Anypoint Studio. See Exporting Projects from Studio for details about this procedure.
Mule applications are packaged into a deployable JAR file that you can later deploy to a running Mule runtime engine. The package contains the application and all its dependencies whether those be JAR files required by the application or by its plugins.
Every Mule application has two descriptors. These descriptors define your Mule application’s dependencies:
-
A
mule-artifact.json
file.
This file describes how your application is composed. -
A
pom.xml
file.
This file describes all the dependencies required by the package to work properly.
Compatibility
Mule 4 applications are compatible with the following Anypoint Studio and Mule Maven Plugin versions:
-
Anypoint Studio 7.x
-
Mule Maven Plugin 3.x
Prerequisites
-
Add the Mule Maven Plugin to your project
See Add the Mule Maven Plugin to a Mule Project for instructions.
Mule Application Structure Reference
At design time, your Mule application must have at least these three basic components:
Component | Type | Description |
---|---|---|
|
Folder |
The source directory for your application’s productive source code and tests. |
|
Descriptor |
The POM file of your Mule application. |
|
Descriptor |
The mule-artifact file of your Mule application. |
These three components are mandatory. If one of them is missing, the project cannot be packaged into a deployable JAR file.
Additionally, the packaging process does not consider any other directory or file in the root folder of your Mule application.
Source Directory Reference
The src
directory has two main folders: main
and test
.
The plugin does not consider any other directory inside src
when packaging the application.
src/main
src/main is the root folder for all the productive source code of the application.
Folder | Folder Type | Description |
---|---|---|
|
source |
The root folder of the Mule configuration files. This folder is mandatory. |
|
resource |
It contains the application resources, such as XML, JSON, and properties files. |
The packaging process sends all files inside src/main/mule
and src/main/resources
to the root directory of your binary package.
Nested folders within src/main/mule
are preserved as directories within the root directory of the binary package.
src/test
src/test is the root folder for all the test source code of the application.
Folder | Folder Type | Description |
---|---|---|
|
source |
It’s the root folder of the test classes used to validate the custom Java code of the app. |
|
source |
It contains the MUnit source code. |
|
resource |
It contains resources, such as XML, JSON, and properties files. |
Package a Mule Application
From the command line in your project’s folder, execute the package goal:
The plugin packages your application and creates the deployable JAR file into the target directory within your project’s folder.
Create an Application Package to Import into Anypoint Studio
To generate a JAR file that can be imported into Anypoint Studio, you must package your application using the -DattachMuleSources
parameter to include source files and metadata that Studio requires to reimport the deployable file as an open Mule project into your workspace.
From the command line in your project’s folder, run:
mvn clean package -DattachMuleSources
The -DattachMuleSources
parameter tells the plugin to add a mule-src
folder inside the META-INF
directory with an exact copy of your application structure at design time. This option also packages project modules and dependencies required to create a functioning Mule deployable archive file that can be deployed into a Mule runtime engine.
Create a Lightweight Package
You can skip bundling the actual modules and external dependencies required to run the Mule application in a Mule runtime engine, and create a lightweight package with only the source files and metadata required to import the JAR package back into Anypoint Studio.
From the command line in your project’s folder, run:
mvn clean package -DlightweightPackage
When you specify this parameter, the plugin creates a lightweight JAR file that does not include any dependencies declared in the Mule application’s pom.xml
file. This JAR file cannot be deployed to a Mule runtime engine, it only offers a way to archive just the Mule application’s source files. The result of this Maven parameter is the same as unchecking Include project modules and dependencies when exporting the Mule application from Anypoint Studio.
Specify Multiple Parameters
You can also combine the parameters together to create a lightweight Mule application package that also includes the source files and metadata to import the package back into Anypoint Studio.
From the command line in your project’s folder, run:
mvn clean package -DattachMuleSources -DlightweightPackage
Exclude Files from the Application Package
When you package an application, you can exclude certain files or directories. Create a _muleExclude
file at the project root directory and edit its content to set the exclusion rules.
Each line in a _muleExclude
file specifies a rule that follows the glob pattern.
For example, consider the following _muleExclude
file which contains two exclusion rules:
fileToBeExcluded.json **/src/main/resources/local_directory
-
The first line indicates that all files named
fileToBeExcluded.json
, inside any directory, are excluded from the application package. -
The second line indicates that only the directory named
local_directory
located undersrc/main/resources
is excluded from the package.
If**/src/main/resources/local_directory
is replaced withlocal_directory
then all directories namedlocal_directory
, inside the project, are excluded from the application package.