Search the FirstSpirit Knowledge Base
Hallo Community,
ich möchte gerne ein FSM Modul mit Hilfe von maven bauen. Das letzte Mal, als ich das machen musste - um den GitHub - e-Spirit/scheduleexecutor: Example and Blueprint shown on #DevCon 2018 zu bauen , habe ich firstspirit-module-parent-pom und co von e-AG · GitHub heruntergeladen, installiert und mich richtig lange gequält habe :-), bis es funktioniert hat.
Im pom.xml von schedulexecutor ist der parent eingetragen
<parent>
<groupId>com.espirit.ps.maven</groupId>
<artifactId>firstspirit-module-parent-pom</artifactId>
<version>3.0.0</version>
</parent>
Das Problem, dass ich jetzt mit meinem Modul habe, ist dass ich schon einen Parent habe, und zwar Spring Boot.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Hat jemand das Problem schon gehabt ? Kann ich irgendwie trotzdem die E-Spirit Plugins benutzen? Und wie? Im Moment bastele ich noch mit ant eine fsm Datei zusammen und ich kann das auch installieren aber die Resourcen haben keine richtige Versionen.
Gruß,
Ana
Vielleicht kann man das damit lösen: Maven – Introduction to the Dependency Mechanism
Habe ich selber aber noch nicht ausprobiert.
Vielleicht kann man das damit lösen: Maven – Introduction to the Dependency Mechanism
Habe ich selber aber noch nicht ausprobiert.
Danke schön!
Das ist vermutlich die einzige Möglichkeit. Ich bin aber lange noch nicht am Ziel 😞
Ich habe ein Haufen XML aus firstspirit-module-parent-pom/pom.xml at master · e-Spirit/firstspirit-module-parent-pom · GitHub kopiert und zwar die ganzen plugins und profiles und oben in meinem pom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.espirit.ps.maven</groupId>
<artifactId>firstspirit-module-parent-pom</artifactId>
<version>3.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
eingefügt.
Mit mvn package wird dann eine fsm Datei generiert aber irgendwas muss ich noch konfigurieren weil das Ergebnis module-isolated.xml enthält noch alle Platzhalter
<module>
<name>${project.name}</name>
<displayName>${project.name} (L, I)</displayName>
<version>${project.version}</version>
<description>${project.description}</description>
<vendor>${project.organization.name}</vendor>
<components>
<web-app scopes="project">
<name>Example SpringBoot-Webapp</name>
<description> Mini App um zu testen, das Spring Boot funktioniert</description>
<web-xml>WEB-INF/web.xml</web-xml>
<web-xml>web.xml</web-xml>
<web-resources>
<resource target="WEB-INF/classes" >classes/application.properties</resource>
${module.resources.global.isolated.web}
</web-resources>
</web-app>
</components>
<resources>
${module.resources.global.isolated}
</resources>
</module>
Was mich noch interessieren würde ist, muss ich in module-resource-plugin jede einzelne jar als resource eintragen?
<plugin>
<groupId>com.espirit.ps.psci</groupId>
<artifactId>module-resource-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<id>generate-module-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<defaultConfiguration>
<scope>module</scope>
<components>web</components>
</defaultConfiguration>
<resources>
<resource>
<identifier>${project.groupId}:${project.artifactId}</identifier>
<path>lib/${project.artifactId}-${project.version}-classes.jar</path>
</resource>
... müssen hier meine jars definiert werden?
</resources>
</configuration>
</execution>
</executions>
</plugin>
Oder erkennt das Plugin - soweit es richtig konfiguriert ist - was meine dependencies sind. Ich hoffe auf letzteres.
Ist überhaupt irgendwo auf github oder in der Doku ein Bespiel - außer ScheduleExecutor , wie so ein pom.xml - bzw. ein ganzes Projekt auszusehen hat?
Ich muss sagen, ich bin kein Fan davon ein Plugin in das Build zu zwingen, nur um eine Ordnungsstruktur, zip und umbenennen zu erreichen. Assembly und Ant Plugin reichen da i.d.R. aus.
Mit dem FS Maven Plugin kenne ich mich leider nicht aus. Wie erwähnt nutze ich meist einfach Assembly/Shade und Ant Plugin um das FSM zu erstellen. Damit habe ich volle Kontrolle.
Hi,
ja, das habe ich dann doch auch gemacht - assembly und rename. Nur die resource-Liste konnte ich nicht automatisch (in Maven build) erzeugen.
Ich habe jetzt einen manuellen Weg gefunden, der mich halbwegs glücklich macht
1) mvn dependency:list -DoutputFile=target/dependencies.txt
Ergebnis sieht so aus
org.springframework.boot:spring-boot-starter-web:jar:2.2.2.RELEASE:compile
org.springframework.boot:spring-boot-starter:jar:2.2.2.RELEASE:compile
...
2) GenerateResourceEntriesFromMavenDependencies.java (siehe unten) im IDE ausführen
Ergebnis sieht so aus
<resource name="org.springframework.boot:spring-boot-starter-web" version="2.2.2.RELEASE">lib/spring-boot-starter-web-2.2.2.RELEASE.jar</resource>
<resource name="org.springframework.boot:spring-boot-starter" version="2.2.2.RELEASE">lib/spring-boot-starter-2.2.2.RELEASE.jar</resource>
...
3) Ergebnis in module.xml reinkopieren
---
public class GenerateResourceEntriesFromMavenDependencies
{
public static void main(String[] args)
{
String dependencyFile="C:/gbn/dev/helpdesk/target/dependencies.txt";
if (args.length>0)
{
dependencyFile=args[0];
}
else
{
System.out.println("no arguments given, revert to default");
}
System.out.println("Using dependency file "+dependencyFile);
Path path = Paths.get(dependencyFile);
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(GenerateResourceEntriesFromMavenDependencies::createEntry);
} catch (IOException ex) {
ex.printStackTrace();
}
}
private static void createEntry(String line)
{
try
{
if (line.trim().isEmpty()) return;
String[] components = line.split(":", 10);
String group=components[0].trim();
String artifact=components[1];
String version=components[3];
String type=components[4].trim();
// System.out.println(Arrays.toString(components));
String filename=artifact+"-"+version+".jar";
if (type.equals("compile")|| type.equals("runtime"))
{
System.out.println( "<resource name=\"" +group+":"+artifact+ "\" version=\"" +version
+ "\">lib/" +filename+"</resource>");
}
}
catch (Exception e)
{
System.out.println(line);
e.printStackTrace();
}
}
}
Kleine Ergänzung: 13. Build systems