Appian Plugin Deploys Successfully but No Modules Appear in Admin Console (Expression Function)

Certified Associate Developer

Title:
Appian Plugin Deploys Successfully but No Modules Appear in Admin Console (Expression Function)

Question:

Hello everyone,

I am developing a simple Appian expression function plugin using Java and Maven in Spring Tool Suite (STS) for Appian 24.1 On-Prem.

The plugin deploys successfully in Admin Console, but the Modules column is empty, so the function does not appear in the Expression Editor and cannot be used in an Expression Rule.

What I have done so far:

  1. Created a simple Java class:

package com.example;

import com.appiancorp.suiteapi.expression.annotations.Function;
import com.appiancorp.suiteapi.expression.annotations.Parameter;

public class HelloPlugin {

    @Function
    public static String hello(@Parameter String name) {
        return "Hello " + name + " from plugin";
    }

}
  1. Created appian-plugin.xml:

<appian-plugin key="hello-plugin"
               name="Hello Plugin"
               description="Simple expression function plugin"
               version="1.0.0"
               vendor="Example">

    <functions>
        <function>com.example.HelloPlugin</function>
    </functions>

</appian-plugin>
  1. Project structure:

src/main/java/com/example/HelloPlugin.java
src/main/resources/META-INF/appian-plugin.xml
  1. Built the plugin using:

mvn clean package
  1. Uploaded the generated JAR in Admin Console → Plug-ins.

The plugin installs successfully, but the Modules column remains empty, and the function hello() does not appear in the expression editor.

Questions:

  • What could cause a plugin to deploy successfully but not register any modules?

  • Is there any additional configuration required for expression function plugins in Appian 24.1?

  • Could this be related to the plugin packaging or manifest configuration?

Any guidance would be appreciated.

Thanks!

  Discussion posts and replies are publicly visible

Parents
  • Since you've tried the XML fixes already and modules still don't show up, the issue is almost certainly one of these two things: **1. Missing resource bundle.** Appian 24.1 requires a properties file for every expression function. Create `src/main/resources/com/example/HelloPlugin.properties` with at least: `hello.name=hello` `hello.description=Returns a greeting` The keys must match the function name. Without this file the plugin loads but registers zero modules because it can't resolve the function metadata. **2. The JAR isn't shading dependencies correctly.** Make sure your pom.xml uses maven-shade-plugin or maven-assembly-plugin to produce a fat JAR. If the Appian SDK classes end up inside your JAR instead of being marked as `provided`, the classloader conflict silently prevents module registration. Check your `tomcat-stdOut.log` right after uploading. Even when Modules shows empty, Appian usually logs a specific error like 'Could not resolve resource bundle' or 'ClassNotFoundException.' That log entry will tell you exactly which of these two it is.
Reply
  • Since you've tried the XML fixes already and modules still don't show up, the issue is almost certainly one of these two things: **1. Missing resource bundle.** Appian 24.1 requires a properties file for every expression function. Create `src/main/resources/com/example/HelloPlugin.properties` with at least: `hello.name=hello` `hello.description=Returns a greeting` The keys must match the function name. Without this file the plugin loads but registers zero modules because it can't resolve the function metadata. **2. The JAR isn't shading dependencies correctly.** Make sure your pom.xml uses maven-shade-plugin or maven-assembly-plugin to produce a fat JAR. If the Appian SDK classes end up inside your JAR instead of being marked as `provided`, the classloader conflict silently prevents module registration. Check your `tomcat-stdOut.log` right after uploading. Even when Modules shows empty, Appian usually logs a specific error like 'Could not resolve resource bundle' or 'ClassNotFoundException.' That log entry will tell you exactly which of these two it is.
Children
No Data