Maven NetBeans Java Application ohne Manifest-Datei

hk

Bekanntes Mitglied
Ich habe das Maven Demoprogramm "mavenproject1" erstellt und in der IDE laufen lassen, ist ok. Dann habe ich ein Build gemacht und versucht diese zu starten. Ergebnis: kein Hauptmanifestattribut, in mavenproject1-1.0-snapshot.jar
Da in der Projektstruktur keine MANIFEST-Datei aufscheint kann ich dort auch keine main-Datei angeben. Diese steht allerdings in der POM-Datei.
Die POM:
[CODE lang="xml" title="POM"]<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<exec.mainClass>com.mycompany.mavenproject1.Mavenproject1</exec.mainClass>
</properties>
</project>[/CODE]

Die Projektstruktur:

Screenshot 2022-03-10 154256.png
 
Ich habe nun in die POM die empfohlenen Default-Zeilen eingefügt. Ergebnis nach Build der gleiche Fehler: kein Hauptmanifestattribut, in mavenproject1-1.0-snapshot.jar.
Ich weiß nicht ob ich das richtig gemacht habe.
Die neue POM:
XML:
<!-- <?xml version="1.0" encoding="UTF-8"?> -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenproject1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <exec.mainClass>com.mycompany.mavenproject1.Mavenproject1</exec.mainClass>
    </properties>
    <!-- Aus Default Manifest eingefügt -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
            <manifestEntries>
              <mode>development</mode>
              <url>${project.url}</url>
              <key>value</key>
            </manifestEntries>
          </archive>
        </configuration>
        
      </plugin>
    </plugins>
  </build>
 
</project>
 
Den manifestEntries-"Block" kannst Du komplett rausschmeißen und nach dem addClasspath fügst Du noch mainClass ein:
Code:
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>com.mycompany.mavenproject1.Mavenproject1</mainClass>
            </manifest>
Könnte funktionieren.
 
Den manifestEntries-"Block" kannst Du komplett rausschmeißen und nach dem addClasspath fügst Du noch mainClass ein:
Code:
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>com.mycompany.mavenproject1.Mavenproject1</mainClass>
            </manifest>
Könnte funktionieren.
Ja, das hat nun geklappt. Herzlichen Dank.
Es gibt über MAVEN unzählige differierende POM-Versionen. Gibt es auch wo eine verlässliche Informationen über eine Mindestanforderung an eine POM (speziell auch für JAVAFX) ?
 
Gibt es auch wo eine verlässliche Informationen über eine Mindestanforderung an eine POM (speziell auch für JAVAFX) ?
Vielleicht mal zum Verständnis: im Umgang mit Projekten gibt es viele Schritte und Aufgaben, vor denen jeder mehr oder weniger gleichermaßen steht.

Maven ist ein Tool, das diese "Standardaufgaben" unterstützt und nach dem Prinzip "Konvention vor Konfiguration" arbeitet, wobei ein deklarativen Ansatz verfolgt wird.

Ein minimales POM sieht also so aus:
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenproject1</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>
(s. https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM)

Der Rest ergibt sich aus den Konventionen, die von der Maven-Version bzw. den von der jeweiligen Maven-Version verwendeten Plugin-Versionen abhängig sind. Alles weitere kannst/musst Du anpassen.

Was JavaFX betrifft, so sollte das "offizielle" Beispiel (https://github.com/openjfx/samples/blob/master/HelloFX/Maven/hellofx/pom.xml) funktionieren. Im Beispiel sind nur die Controls enthalten, ggf. musst Du weitere FX-Abhängigkeiten einfügen.
 
Vielleicht mal zum Verständnis: im Umgang mit Projekten gibt es viele Schritte und Aufgaben, vor denen jeder mehr oder weniger gleichermaßen steht.

Maven ist ein Tool, das diese "Standardaufgaben" unterstützt und nach dem Prinzip "Konvention vor Konfiguration" arbeitet, wobei ein deklarativen Ansatz verfolgt wird.

Ein minimales POM sieht also so aus:
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenproject1</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>
(s. https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM)

Der Rest ergibt sich aus den Konventionen, die von der Maven-Version bzw. den von der jeweiligen Maven-Version verwendeten Plugin-Versionen abhängig sind. Alles weitere kannst/musst Du anpassen.

Was JavaFX betrifft, so sollte das "offizielle" Beispiel (https://github.com/openjfx/samples/blob/master/HelloFX/Maven/hellofx/pom.xml) funktionieren. Im Beispiel sind nur die Controls enthalten, ggf. musst Du weitere FX-Abhängigkeiten einfügen.
Danke, werde ich tun.
 

Zurück
Oben