ana_oleski
Returning Observer

FSM Modul mit maven bauen wenn parent pom schon belegt?

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions
hbarthel
New Responder

Vielleicht kann man das damit lösen: Maven – Introduction to the Dependency Mechanism

Habe ich selber aber noch nicht ausprobiert.

View solution in original post

0 Kudos
5 Replies
hbarthel
New Responder

Vielleicht kann man das damit lösen: Maven – Introduction to the Dependency Mechanism

Habe ich selber aber noch nicht ausprobiert.

0 Kudos

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?

0 Kudos
  • Die module.xml muss alle Resource enthalten. Deswegen baue ich i.d.R. ein fat-Jar, welche alle Abhängigkeiten enhält.
  • Die Platzhalter sind vermutlich noch vorhanden, da das Resource Filterring nicht eingeschaltet ist.

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.

0 Kudos

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();

  }

  }

}

0 Kudos
hbarthel
New Responder

Kleine Ergänzung: 13. Build systems

0 Kudos