Skip to main content
Version: 0.21.0

Dependencies

Concord flows use task provided by external Java libraries (plugins). These are declared as Maven dependencies in your concord.yaml. The plugin understands these declarations and uses them to power features like task name completion and the Dependencies view in the tool window.

How it Works

When a project is opened, the plugin:

  1. Collects all dependency declarations from configuration.dependencies, configuration.extraDependencies, and the same sections inside profiles.
  2. Resolves each dependency to a local JAR file using your dependencies cache (~/.concord/depsCache by default). If a JAR is not found locally, it will attempt to download it from the configured repositories.
  3. Extracts task names by scanning @Named annotations inside the JARs (via the META-INF/sisu/javax.inject.Named index).
  4. Provides the extracted names as completion suggestions for task: values, scoped to the correct project.

Supported Dependency Locations

The plugin looks for dependency lists in the following YAML paths:

configuration:
dependencies:
- "mvn://com.walmartlabs.concord.plugins.basic:smtp-tasks:2.8.0"
extraDependencies:
- "mvn://com.walmartlabs.concord.plugins:git:2.12.0"

profiles:
production:
configuration:
dependencies:
- "mvn://com.walmartlabs.concord.plugins:s3:1.5.0"

Task Name Completion

Once dependencies are resolved, the plugin provides autocompletion for the task: field in flow steps:

Concord Task

Context-aware autocompletion for task names extracted from Maven dependencies.

Task name suggestions are scope-aware: each scope only shows tasks from its own dependencies.

tip

Press CtrlSpace in a task: value to see all available task names for the current scope.

Error Reporting

When a dependency cannot be resolved — for example, due to incorrect coordinates or an unavailable artifact — the plugin reports the problem in three places simultaneously.

Inline Editor Errors

Each unresolvable mvn:// string is highlighted directly in the editor as an inspection error. The error message includes the reason for the failure (e.g. "artifact not found").

Invalid dependency format (not matching the mvn://group:artifact:version pattern) is also flagged.

Unresolved dependency highlighted in editor

Unresolvable dependency string highlighted with an error and a tooltip showing the reason.

tip

You can configure the severity of this inspection (Error, Warning, etc.) in Settings | Editor | Inspections | Concord | Unresolved dependency.

Build Sync Tab

Dependency resolution progress and errors are reported in the Build tool window under the Sync tab. Clicking an error navigates to the exact line in the YAML file where the dependency is declared.

Dependency errors in Build Sync tab

Build tool window showing dependency resolution errors with clickable file links.

Additionally, files that contain unresolved dependencies are marked as problem files in the Project tree (file names displayed in red), making it easy to spot affected files at a glance.

Server-Only Versions

Some dependencies use special version string like latest that are resolved at runtime by the Concord server. While these work fine when a flow is executed on the server, the IDE cannot resolve them locally — which means task name completion, parameter validation, and hover documentation won't work for those tasks.

The plugin detects these versions and shows a weak warning on the dependency string:

Server-only dependency version warning

Weak warning on a dependency with latest version that cannot be resolved locally.

The cli Profile Approach

The recommended solution is to add a concrete version of the dependency to a special profilescli section. The plugin resolves dependencies from all profiles, including cli, so this gives the IDE what it needs without affecting server execution:

configuration:
dependencies:
- "mvn://com.walmartlabs.concord.plugins.basic:smtp-tasks:latest"

profiles:
cli:
configuration:
dependencies:
- "mvn://com.walmartlabs.concord.plugins.basic:smtp-tasks:2.36.0"

The original latest version is preserved for the server, while the IDE uses the concrete 2.36.0 to provide full autocomplete and validation.

Quick Fix: Add to cli Profile

The plugin provides a quick fix that automates this process:

  1. Place the caret on the highlighted dependency.
  2. Press AltEnter to open the intention menu.
  3. Select Add to cli profile with concrete version.
  4. Enter the desired version in the dialog that appears.

The plugin will create the profiles.cli.configuration.dependencies structure automatically if it doesn't exist, or append to the existing list.

Quick fix to add dependency to cli profile

Quick fix suggesting to add the dependency to the cli profile with a concrete version.

Result after applying the quick fix

After applying the fix, the concrete version is added to profiles.cli and the warning is suppressed.

tip

Once a dependency with the same groupId:artifactId exists in the cli profile, the warning on the original latest version is automatically suppressed.

note

The inspection also detects other non-resolvable version patterns (e.g. placeholders that don't contain a numeric version). It works in configuration.dependencies, configuration.extraDependencies, and their profile-specific variants.

Dependency Change Tracking

The plugin monitors your dependency declarations for changes. When you add, remove, or modify a dependency in configuration.dependencies (or extraDependencies), a floating toolbar appears at the top of the editor with two actions:

  • Refresh — Triggers a background reload: re-resolves JARs and re-extracts task names.
  • Dismiss — Hides the notification until the next dependency change.

The initial load happens automatically when the project is opened. After that, the plugin only prompts for a reload when actual dependency values change (whitespace-only edits are ignored).

Repository Configuration

The plugin uses Concord CLI's mvn.json file (~/.concord/mvn.json) to determine which Maven repositories to use when resolving dependencies. You can manage repositories directly from the IDE via Settings | Tools | Concord | Repositories.

Repositories settings page

The Repositories settings page showing configured Maven repositories and the dependencies cache path.

Settings

  • Dependencies cache path — Local directory where resolved JARs are stored. Defaults to ~/.concord/depsCache. This path is also passed to the Concord CLI as --deps-cache-dir when running flows.
  • Configuration file — Shows the path to mvn.json (~/.concord/mvn.json). The CLI always reads from this fixed location.
  • Maven repositories — A table of configured repositories. Use the toolbar buttons to add, edit, or remove entries.

Adding a Repository

Click + to open the repository editor dialog. Each repository supports:

  • ID and URL — Required. The repository identifier and its HTTP(S) endpoint.
  • Authentication — Optional username and password for authenticated repositories.
  • Release Policy / Snapshot Policy — Control whether releases or snapshots are enabled, and set the update policy (never, always, daily) and checksum policy (ignore, warn, fail).
  • Proxy — Optional HTTP or HTTPS proxy configuration.
Repository editor dialog

The repository editor dialog with authentication, policy, and proxy settings.

Changes are written to ~/.concord/mvn.json when you click Apply or OK. The same file is read by the Concord CLI, so the IDE and CLI always share the same repository configuration.

tip

If no repositories are configured, the plugin automatically falls back to Maven Central.

note

The plugin no longer uses IntelliJ's Maven plugin for repository configuration. All repository settings are managed through mvn.json, which is shared with the Concord CLI.