kannengi
Elite Observer

Gradle-Plugin: WebApp in FSM-Modul

Jump to solution

Hallo,

ich verwende das von Gradle-Plugin von e-spirit, um ein FSM-Modul zu bauen.
Das Modul soll ein Exectable (Public Component) und eine WebApp enthalten.
Ich benutze noch nicht die neueste Version des Plugins (2.1.2), weil ich noch den Legacy Mode brauche, aber ich hoffe, das tut nichts zur Sache.


Hier meine (vereinfachte) Projektstruktur:

+-- build.gradle.kts
+-- gradle.properties
+-- settings.gradle.kts
+-+ src
| +-+ main
|   +-+ fsm-resources
|   +-+ java
|     +-+ com.relounge
|       +-- MyExecutable.java (annotiert mit "@PublicComponent")
+-+ web
| +-- build.gradle.kts
| +-+ src
|   +-+ main
|     +-+ fsm-resources
|       +-+ web
|         +-- web.xml
|     +-+ java
|       +-+ com.relounge.web
|         +-- MyPreviewApp.java (annotiert mit "@WebAppComponent")

 

Im Top Level "build.gradle.kts" habe ich

firstSpiritModule {
    ...
    resourceMode = de.espirit.firstspirit.server.module.ModuleInfo.Mode.LEGACY
    webAppComponent("My-Preview-Webapp", project(":web"))
}

 

Im "settings.gradle.kts" habe ich

include("web")

 

Im "build.gradle.kts" des Unterordners "web" habe ich

dependencies {
    compileOnly(group = "de.espirit.firstspirit", name = "fs-isolated-runtime", version = fsRuntimeVersion)
    fsWebCompile(group = "javax.servlet.jsp.jstl", name = "jstl", version = "1.2")
    fsWebCompile(group = "org.apache.taglibs", name = "taglibs-standard-impl", version = "1.2.5")
}

 

Das erzeugte module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module>
  <name>rl_fs-module</name>
  <components>
    <public>
      <name>MyExecutable</name>
      <displayname/>
      <description/>
      <class>com.relounge.MyExecutable</class>
    </public>
    <web-app scopes="project,global">
      <name>My-Preview-Webapp</name>
      <displayname>My-Preview-Webapp</displayname>
      <description/>
      <class>com.relounge.web.MyPreviewApp</class>
      <web-xml>web/web.xml</web-xml>
      <web-resources>
        <resource name="com.relounge:fs-modules" version="0.0.1-SNAPSHOT">lib/fs-modules-0.0.1-SNAPSHOT.jar</resource>
        <resource name="web" version="0.0.1-SNAPSHOT">web</resource>
        <resource name="fs-modules:web" version="0.0.1-SNAPSHOT">lib/web-0.0.1-SNAPSHOT.jar</resource>
        <resource name="javax.servlet.jsp.jstl:jstl" version="1.2" minVersion="1.2">lib/jstl-1.2.jar</resource>
        <resource name="org.apache.taglibs:taglibs-standard-impl" version="1.2.5" minVersion="1.2.5">lib/taglibs-standard-impl-1.2.5.jar</resource>
      </web-resources>
    </web-app>
  </components>
  <resources>
    <resource name="com.relounge:fs-modules" version="0.0.1-SNAPSHOT" scope="module" mode="legacy">lib/fs-modules-0.0.1-SNAPSHOT.jar</resource>
    <resource name="commons-lang:commons-lang" scope="module" mode="legacy" version="2.6" minVersion="2.6">lib/commons-lang-2.6.jar</resource>
	....
  </resources>
</module>

 

Meine Frage wäre, wie ich es hinkriege, dass in den web-resources der Webapp nicht mehr das "lib/fs-modules-0.0.1-SNAPSHOT.jar" auftaucht -
denn in diesem jar sind ja nur die Java Klassen für das Executable, das ich aber in der Webapp gar nicht brauche.
Die in der Webapp benötigten Klassen sind ja in lib/web-0.0.1-SNAPSHOT.jar.

Irgendwelche Ideen?
Vielen Dank!!

Gruß,
Benny

0 Kudos
1 Solution

Accepted Solutions
Windmüller
Crownpeak employee

Hallo,

ich habe es gerade mit der neuesten Version ausprobiert, da ist es genauso. Zugegeben, das Verhalten ist hier nicht intuitiv. Allerdings werden wir es vermutlich nicht einfach umbauen können, da sich existierende Projekte eventuell darauf verlassen.

Mein Vorschlag wäre, das Executable in ein separates Submodul zu verschieben und mit

dependencies {
fsModuleCompile(project(":executable"))
}

einzubinden. Es gibt dazu auch ein Beispiel im Repository.

View solution in original post

0 Kudos
1 Reply
Windmüller
Crownpeak employee

Hallo,

ich habe es gerade mit der neuesten Version ausprobiert, da ist es genauso. Zugegeben, das Verhalten ist hier nicht intuitiv. Allerdings werden wir es vermutlich nicht einfach umbauen können, da sich existierende Projekte eventuell darauf verlassen.

Mein Vorschlag wäre, das Executable in ein separates Submodul zu verschieben und mit

dependencies {
fsModuleCompile(project(":executable"))
}

einzubinden. Es gibt dazu auch ein Beispiel im Repository.

0 Kudos