- BuildMaster
- Getting Started with BuildMaster
- Builds and Continuous Integration
- What is a "Build" in BuildMaster?
- Git and Source Control
- Git Pipelines and Workflows
- Build Scripts & Templates
- Packages & Dependencies
- Build Artifacts
- Automated Testing & Verification
- Deployment & Continuous Delivery
- What is a “Pipeline” in BuildMaster?
- CI Server (Jenkins, TeamCity, etc.) Integration
- Deployment Scripts & Templates
- Automatic Checks & Approval Gates
- Manual Deployment Steps and Tasks
- Databases
- Configuration Files
- Rollbacks
- Advanced CD Patterns
- Applications & Releases
- Connecting to your Servers with BuildMaster
- Scripting in BuildMaster
- Configuring for Your Team
- Docker/Containers
- Development Platforms
- Deployment Targets
- Tools & Service Integrations
- Reference
- BuildMaster API Endpoints & Methods
- Extending BuildMaster
- Built-in Functions & Variables
- Applications
- Builds
- Configuration Files
- Containers
- Credentials
- Databases
- Deployables
- Environments
- Executions
- Files
- General
- JSON
- Linux
- Lists
- Maps
- Math
- Nuget
- Packages
- Pipelines
- PowerShell
- Python
- Releases
- Servers
- Strings
- XML
- Built-in Operations
- Azure
- Batch
- BuildMaster
- Configuration Files
- Databases
- DotNet
- Files
- Firewall
- General
- Apply-Template
- Attach Package
- Build
- Checkout-Code
- Close-Issue
- Concatenate-Files
- Copy-Files
- Create-Directory
- Create-File
- Create-Issue
- Create-Issue
- Create-IssueComment
- Create-Package
- Create-ZipFile
- Delete-Files
- Download-Asset
- Download-Http
- Ensure-Directory
- Ensure-File
- Ensure-HostsEntry
- Ensure-Metadata
- Ensure-Milestone
- Ensure-Package
- Ensure-Release
- Ensure-Tag
- Exec
- Execute Python Script
- Execute VSTest Tests
- Get-Http
- Install-Package
- OSCall
- OSExec
- Post-Http
- Push-PackageFile
- PYCall
- PYEnsure
- Query-Package
- Remediate-Drift
- Rename-File
- Repackage
- Replace-Text
- Send-Email
- Set-FileAttributes
- Set-Variable
- SHEnsure
- Sleep
- Transfer-Files
- Transition-Issues
- Upload-Assets
- Upload-Http
- Upload-ReleaseAssets
- Git
- IIS
- Nuget
- PowerShell
- ProGet
- Python
- Registry
- Servers
- Services
- Shell
- Windows
- Administration
- Installation & Upgrading
- ProGet
- Getting Started with ProGet
- Packages: Managing & Tracking
- Feeds Types & Third-Party Packages
- What is a "Feed" in ProGet?
- What is a "Connector" in ProGet?
- NuGet (.NET)
- PowerShell
- Chocolatey (Windows/Machine)
- RubyGems (ruby)
- Visual Studio Extension (.vsix)
- Maven (Java)
- npm (Node.js)
- Bower (JavaScript)
- Debian (Apt)
- Helm (Kubernetes)
- PyPI (Python)
- Conda (Python)
- RPM (Yum)
- Alpine (APK)
- CRAN (R)
- pub (Dart/Flutter)
- Other Feed Types
- Universal Packages & Feeds
- UPack Overview
- Universal Packages
- Virtual Packages
- Tools and Libraries
- Universal Package Registry
- Downloads & Source Code
- Universal Feed API
- Asset Directories & File Storage
- Docker and Containers
- Replication & Feed Mirroring
- Software Composition Analysis (SCA)
- Security and Access Controls
- Cloud Storage (Amazon S3, Azure Blob)
- Administration
- Installation & Upgrading
- API Endpoints & Methods
- Otter
- Getting Started with Otter
- Orchestration & Server Automation
- Connecting to your Servers with Otter
- Collecting & Verifying Configuration
- Drift Remediation / Configuration as Code
- Scripting in Otter
- Configuring for Your Team
- Installation & Upgrading
- Administration & Maintenance
- Reference
- Otter API Reference
- OtterScript Reference
- Built-in Functions & Variables
- Executions
- Files
- General
- JSON
- Linux
- Lists
- Maps
- Math
- PowerShell
- Python
- Servers
- Strings
- XML
- Built-in Operations
- Batch
- Docker
- DotNet
- Files
- Firewall
- General
- Apply-Template
- Collect Debian Packages
- Collect RPM Packages
- Collect-InstalledPackages
- Concatenate-Files
- Copy-Files
- Create-Directory
- Create-File
- Create-Package
- Create-ZipFile
- Delete-Files
- Download-Asset
- Download-Http
- Ensure-Directory
- Ensure-File
- Ensure-HostsEntry
- Ensure-Metadata
- Ensure-Package
- Exec
- Execute Python Script
- Get-Http
- Install-Package
- OSCall
- OSExec
- Post-Http
- Push-PackageFile
- PYCall
- PYEnsure
- Query-Package
- Remediate-Drift
- Rename-File
- Repackage
- Replace-Text
- Send-Email
- Set-FileAttributes
- Set-Variable
- SHEnsure
- Sleep
- Transfer-Files
- Upload-Assets
- Upload-Http
- IIS
- Otter
- PowerShell
- ProGet
- Python
- Registry
- Servers
- Services
- Shell
- Windows
- Installation & Maintenance
- Windows (Inedo Hub)
- What is the Inedo Hub?
- Configuring & Maintaining Inedo Products
- Offline Installation (no Internet access)
- HOWTO: Install on Windows
- HOWTO: Upgrade or Downgrade with the Inedo Hub
- HOWTO: Install Pre-release Product Versions
- HOWTO: Configure Your Inedo Product to Run As a Windows Domain Account
- Silent/Automated Installation Guide
- Legacy (Traditional) Installer
- Linux (Docker)
- Manual Installation
- High Availability & Load Balancing
- LDAP/AD Integration
- IIS & Web Hosting on Windows
- Logging & Analytics
- SAML Authentication
- Upgrading your Inedo Product
- Managing Agents and Servers
- Backing Up & Restoring
- Installation Configuration Files
- SQL Server & Inedo Products
- Windows (Inedo Hub)
- Inedo Agent
- What is the Inedo Agent?
- Installation & Upgrading
- Downloads & Release Notes
- Maintenance & Configuration
- Internal Architecture
- MyInedo
- OtterScript (Execution Engine)
- Reference
- OtterScript
- Inedo Execution Engine
- Operations & Functions
- Text Templating
- Resource Pools
- Runtime Variables
- Advanced Scenarios & Features
- Statements and Blocks
- Romp (Discontinued)
- Using Romp
- Installing, Configuring, and Maintaining
- Romp CLI Reference
- Package Layout
- Downloads & Source Code
- Extensibility
- Inedo SDK
Maven
BuildMaster can help you build your Maven-based Java projects, which you can then deploy to Tomcat, WildFly/JBoss EAP, Jetty, or other services like Azure.
Maven is a command-line tool that's used to compile Java projects and package them into an artifact (JAR, WAR, EAR, etc.). It's used by all of the major IDEs (Eclipse, Netbeans, IntelliJ), as well as BuildMaster.
This article focuses primarily on how to work with Maven in your build script, so that you can create the artifacts you need to deploy later on in your pipeline.
Installing and Configuring Maven
Before building your Maven project using BuildMaster, you'll need to make sure that both Maven is installed and the appropriate JDK is installed on your build server.
Alternatively, you can use a Docker container image like maven on Docker Hub; see Image-based Services (Containerized Builds) to learn more.
Build Maven Project Script Template
The easiest way to work with Maven in BuildMaster is with the Build Maven Project Script Template. It's a simple, no-code solution that will check out your code from Git, run Maven, then capture build artifacts for later deployment.
The script template can set the project version, configure repositories (settings.xml), and even run npm to build front-end, Javascript code for Java web applications.
Creating a Build Script with Maven
Although a Maven project file (i.e. POM.xml file) can get complicated, running maven itself is really easy. You just specify the "goals/phases" to run (generally clean
and package
), and maven will handle the rest.
When deploying with BuildMaster, we recommend only packaging artifacts because the package output will be captured and deployed as a BuildMaster artifact
You can do this in OtterScript with the Java::Maven
operation as follows:
Java::Maven
(
GoalsAndPhases: "clean package"
);
The Java::Maven
operation is essentially a wrapper for the mvn
command-line tool, and if you're familiar with mvn
, it'll be just as easy to use. The above OtterScript basically translates to mvn clean package
.
Sample Build Script
The following sample script will get the latest source code from Git, run Maven, then capture the build output (jar file) as a BuildMaster artifact:
Git::Get-Source
(
RepositoryUrl: https://github.com/Inedo/ProfitCalcJava.git,
Branch: master
);
Java::Maven
(
GoalsAndPhases: "clean package",
In: ProfitCalcJava
);
Create-Artifact ProfitCalcJava
(
From: ProfitCalcJava\target
);
Integrating Maven with ProGet
When BuildMaster is connected to ProGet, ProGet feeds can be integrated with the Java::Maven
operation by specifying the DependenciesFeed
and PluginsFeed
paramters. When either of these parameters are specified, a custom "settings.xml" is created with those Maven repositories and their related authentication accounts. This file will then be pased to the mvn
command using the -s
parameter.
For example:
Java::Maven
(
GoalsAndPhases: "clean package",
In: ProfitCalcJava,
DependenciesFeed: feed::InternalMaven,
PluginsFeed: feed::InternalMaven
);
This operation will generate a settings.xml
file with these feeds and run the following mvn
command in the ProfitCalcJava directory:
mvn clean package -s settings.xml
Alternatively, you can create a custom settings.xml on your server and pass that to the Java::Maven
operation using the SettingsXml
parameter.