Mit Maven eine jar Datei Bauen ohne irgendeine main Methode

matze86

Bekanntes Mitglied
Hallo, ich habe mittels Maven mehrere Klassen in verschiedenen Quelltexten in einen Paket. Das ganze baue ich, mit samt Abhängigkeiten, zur jar Datei.

Soweit so gut. Dazu habe ich auch eine Klasse mit einer "main" Methode. Lasse ich sie weg (was ich möchte), meckert mich Eclipse beim bauen an, dass sie fehlt.

Jetzt zu meinen anliegen. Ich möchte eine Jahr Datei bauen ohne das irgendeine Klasse die Methode "main" hat.
Dann möchte ich die einzelnen Klassen von der jar Datei in ein anderen Projekt zu importieren.
Da, dass ich erst recht neu bin weiß ich nicht ob man das so macht, oder ob man die ganze jar Datei importiert.

Vielleicht kann mir dazu einen Rat geben.
Vielen dank im voraus.
 
K

kneitzel

Gast
Bitte immer alle Details bringen:
a) pom.xml
b) wie baust Du das jar genau?
c) Was für Fehler bekommst du?

Eine Library lässt sich mit Maven ganz ohne Probleme bauen.
 

mihe7

Top Contributor
Wenn Du mit Maven arbeitest, reicht ein "Run As" -> "Maven install". Dadurch werden die Klassen kompiliert, das Jar gebaut und im lokalen Maven-Repository installiert. Die anderen Maven-Projekte brauchen dann nur noch die dependency anzugeben.
Dann möchte ich die einzelnen Klassen von der jar Datei in ein anderen Projekt zu importieren.
Da, dass ich erst recht neu bin weiß ich nicht ob man das so macht, oder ob man die ganze jar Datei importiert.
In der Regel nimmt man die komplette Jar in den Classpath auf (ggf. mit Unterstützung der IDE).

Ich hatte hier mal was über ein paar grundlegende Zusammenhänge geschrieben: https://www.java-forum.org/thema/classpath-ressourcen-ides-und-build-systeme.194131/ Hilft Dir vielleicht beim Verständnis.
 
M

Mart

Gast
vllt brauchst du ja mvn deploy mit dem deploy plugin das glaub ich von haus aus shcon dabei ist? das kann repositories bauen mit der jar datei ( wie zb in github mit den github repositories )
 

matze86

Bekanntes Mitglied
Das bauen ohne "main" hat funktioniert. Jetzt muss ich nochmal fragen, könnte man nicht die .jar Datei einfach entpacken und mit den Ordner der Abhängigkeiten an einen Ort kopieren und die dann in Java importieren?
Oder macht man das so nicht? Muss man immer ein classpath angeben?
 
K

kneitzel

Gast
Das kann man so machen. Siehe z.B. Maven Shade Plugin. Oder such mal nach Fat Jars.

Paar Probleme gibt es ggf .it Inhalten aus dem META-INF Ordner. Z.B. Signaturen müssten entfernt werden.
 

temi

Top Contributor
Das bauen ohne "main" hat funktioniert. Jetzt muss ich nochmal fragen, könnte man nicht die .jar Datei einfach entpacken und mit den Ordner der Abhängigkeiten an einen Ort kopieren und die dann in Java importieren?
Oder macht man das so nicht? Muss man immer ein classpath angeben?
Wenn man ein Library-Projekt hat, dann könnte man ein lokales Maven-Repository erstellen, in das man die Library deployt. Dann kann man sie im anderen Projekt auch wieder, wie alle anderen Abhängigkeiten, mit Maven importieren (aus dem lokalen Repository).

Keine Ahnung, ob das der übliche Weg ist. Es gibt bestimmt noch andere Möglichkeiten.
 
K

kneitzel

Gast
Wenn man ein Library-Projekt hat, dann könnte man ein lokales Maven-Repository erstellen, in das man die Library deployt. Dann kann man sie im anderen Projekt auch wieder, wie alle anderen Abhängigkeiten, mit Maven importieren (aus dem lokalen Repository).

Keine Ahnung, ob das der übliche Weg ist. Es gibt bestimmt noch andere Möglichkeiten.
Also Du beschreibst den üblichen Weg. Ich hatte ganz vergessen, dass es ja um eine Library geht.

Es wird Maven verwendet und Maven nutzt das lokale Repository. Daher macht es Sinn, die eigene Library einfach entsprechend zu deployen.
Wenn man die Software nicht nur selbst nutzen will, dann deployed man seine Abhängigkeit zu einem Zielserver. Das kann Maven Central sein aber auch jedes andere Repository (Also z.B. selbst betrieben oder github oder ....).

Wichtig ist dabei: Die Abhängigkeiten der Lib werden da dann nicht mit eingebunden! Zu dem Maven Repository gehlrt auch immer die pom Datei und die Abhängigkeiten Deiner Lib werden automatisch mit geladen, wenn deine Lib eingebunden wird -> Also auf keinen Fall eine "far jar" deployen!

Und das Einbinden in anderen Projekten kann dann ganz einfach wie alle Abhängigkeiten erfolgen: Über Angabe von groupId, artefactId und version.
 

sascha-sphw

Top Contributor
Beispiel zum Text von @mihe7 und @kneitzel

Lib 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.example</groupId>
    <artifactId>my-lib</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>my-lib</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- your deps -->
    </dependencies>
</project>

Bash:
mvn install

Die Lib wird dann von maven gebaut und in das lokale (~/.m2) Repository kopiert.

Application 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.example</groupId>
    <artifactId>my-awesome-application</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>my-awesome-application</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>my-lib</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>
 
M

Mart

Gast
Es wird Maven verwendet und Maven nutzt das lokale Repository. Daher macht es Sinn, die eigene Library einfach entsprechend zu deployen.
Wenn man die Software nicht nur selbst nutzen will, dann deployed man seine Abhängigkeit zu einem Zielserver. Das kann Maven Central sein aber auch jedes andere Repository (Also z.B. selbst betrieben oder github oder ....).
#4 ;)
 
M

Mart

Gast
Wenn man die Software nicht nur selbst nutzen will, dann deployed man seine Abhängigkeit zu einem Zielserver. Das kann Maven Central sein aber auch jedes andere Repository (Also z.B. selbst betrieben oder github oder ....).
 

matze86

Bekanntes Mitglied
Also nochmal für mich zum "mitschreiben".
Ich habe ein Mavenprojekt mit der pom.xml siehe unten.
In den MavenProjekt habe ich 2 Klassen. Und in Maven wird die Bibliothek pi4j geladen.

Jetzt möchte ich unabhängig von der gebauten Jar eine Klasse erstellen, die die Klasse oder Klassen importiert.

Muss man zwingend mit Maven wieder ein Projekt erstellen oder einfach ein Java Projekt?

Hier die pom.xml
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>matze_matrix</groupId>
  <artifactId>matze_matrix</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>matrix</name>

      <dependencies>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

    <!-- include Pi4J Core -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-core</artifactId>
        <version>${pi4j.version}</version>
    </dependency>

    <!-- include Pi4J Plugins (Platforms and I/O Providers) -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-raspberrypi</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-pigpio</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
</dependencies>
 
 
 


 <properties>
  <slf4j.version>1.7.32</slf4j.version>
    <pi4j.version>2.0</pi4j.version>
        <main.class>matze_matrix.Tester</main.class>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>

        <!-- plugin versions -->
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <maven.jar.version>2.1</maven.jar.version>
        <maven.shade.version>3.2.4</maven.shade.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <release>${java.version}</release>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven.jar.version}</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>${main.class}</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>${maven.shade.version}</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
              </transformers>
            </configuration>
            </plugin>

        </plugins>
        
      
        
    </build>
 
 
 
 
</project>
 

mihe7

Top Contributor
Muss man zwingend mit Maven wieder ein Projekt erstellen oder einfach ein Java Projekt?
Du hast irgendwie noch immer eine falsche Vorstellung von den Zusammenhängen. Ich vereinfache das mal stark.

Java-Files werden beim Kompilieren in Class-Files übersetzt. Ein Jar ist einfach ein ZIP, das die Paketstruktur (Verzeichnisse) inkl. der Class-Files enthält. Es spielt aber keine Rolle, welche Tools Du verwendest, um diese Aufgaben zu erledigen.

Maven ist ein solches Tool (Buildsystem), das alle möglichen Schritte übernimmt, unter anderem wird eben auch ein Jar erzeugt, das Du z. B. im target-Verzeichnis des Maven-Projekts findest.

Mit einem "mvn install" (das ggf. von der IDE automatisch ausgeführt wird), wird das Jar von Maven in das lokale Maven-Repository installiert, so dass es von anderen Maven-Projekten aus über eine "dependency" in der POM referenziert werden kann. Das hat aber nichts mehr mit Java zu tun, sondern ist eben eine Eigenheit von Maven.

Du bist somit natürlich keineswegs dazu gezwungen, Maven in einem Projekt zu verwenden, nur weil eine Lib mit Maven gebaut wurde. Ein Jar ist ein Jar.

Es ist also kein Problem, ein x-beliebiges Buildsystem (z. B. ant oder IDE intern) zu verwenden, Du musst lediglich dafür sorgen, dass Du das Jar Deiner Lib (und ggf. etwaige Jars, von denen die Lib abhängig ist) dem Buildsystem passend zur Verfügung stellst.
 

matze86

Bekanntes Mitglied
Du musst lediglich dafür sorgen, dass Du das Jar Deiner Lib (und ggf. etwaige Jars, von denen die Lib abhängig ist) dem Buildsystem passend zur Verfügung stellst.
Genau das meinte ich, wenn ich blanco auf dem PC oder Raspberry einen Java Quelltext erstelle, wie binde ich dann meine erstellten Klassen, die ich jar gepackt habe dann ein?
 
M

Mart

Gast
in dem du ein package management benutzt...

das ist zb
-maven
-dein build path
- gradle
- deine ide die den build path verwaltet
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Mit Maven eine jar Datei bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 1
J Maven Mit Maven eine ZIP Datei erstellen Tools - Maven, Gradle, Ant & mehr 0
G Maven Mit Maven Assemblieren und über Profiles eine properties-Datei manipulieren Tools - Maven, Gradle, Ant & mehr 2
D Maven - wo gehört eine .properties-Datei hin? Tools - Maven, Gradle, Ant & mehr 20
fastjack Maven: eine Jar für mehrere Teilprojekte Tools - Maven, Gradle, Ant & mehr 5
B Maven Error bei Referenz zweier Poms auf eine Pom Tools - Maven, Gradle, Ant & mehr 2
LimDul Maven-Abhängigkeiten im Build prüfen? Tools - Maven, Gradle, Ant & mehr 9
D Maven deployment über WebDAV Tools - Maven, Gradle, Ant & mehr 3
D Maven ear plugin konfigurieren Tools - Maven, Gradle, Ant & mehr 24
F Maven Fehler Tools - Maven, Gradle, Ant & mehr 11
R Maven erzeugt package ohne Bibliotheken (Libaries, Dependencies) Tools - Maven, Gradle, Ant & mehr 10
Oneixee5 Maven deploy - per SSH Tools - Maven, Gradle, Ant & mehr 6
H Maven kein Hauptmanifestattribut Tools - Maven, Gradle, Ant & mehr 10
M Programm mit Maven erstellen und starten samt Abhängigkeiten Tools - Maven, Gradle, Ant & mehr 27
D Interne Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 51
J log4j2 mit Hibernate über Maven Tools - Maven, Gradle, Ant & mehr 10
thor_norsk Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf IntelliJ IDE starten Tools - Maven, Gradle, Ant & mehr 8
H Maven JUnit5 Tests werden ignoriert Tools - Maven, Gradle, Ant & mehr 5
thor_norsk Maven Tools - Maven, Gradle, Ant & mehr 32
ExceptionOfExpectation Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf Eclipse starten Tools - Maven, Gradle, Ant & mehr 20
Ich kann Maven nicht als UmgebungsVariable hinzufügen Tools - Maven, Gradle, Ant & mehr 2
F Maven JAR Plugin Probleme Tools - Maven, Gradle, Ant & mehr 4
W Was "braucht" man denn alles? Maven, Ant, Git, ... Tools - Maven, Gradle, Ant & mehr 21
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
M Spring Boot Maven pom.xml-Eintrag Tools - Maven, Gradle, Ant & mehr 17
Encera JavaFX und Maven funktioniert nicht Tools - Maven, Gradle, Ant & mehr 1
B maven multi module Projekt und unnötige/zusätzliche Leerzeilen Tools - Maven, Gradle, Ant & mehr 4
J Maven Konfusion Tools - Maven, Gradle, Ant & mehr 7
Tippster Maven Sqlite integrieren (Eclipse, Maven) Tools - Maven, Gradle, Ant & mehr 4
T Image kreieren mit Maven bei JavaFX und nicht modularen Jars Tools - Maven, Gradle, Ant & mehr 12
T JSON Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 7
T JavaFX, Jar über Maven kreieren Tools - Maven, Gradle, Ant & mehr 2
Encera Libraries Maven Projekt hinzufügen Tools - Maven, Gradle, Ant & mehr 9
Oneixee5 Maven Phase Tools - Maven, Gradle, Ant & mehr 3
Robertop maven copy-resources nicht in WAR Datei Tools - Maven, Gradle, Ant & mehr 2
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
H Maven Maven: <mainClass>NAME?</mainClass> Tools - Maven, Gradle, Ant & mehr 13
H Maven maven-source-plugin is missing Tools - Maven, Gradle, Ant & mehr 5
M Missing Artifact on selbst gehostestes Maven Paket Tools - Maven, Gradle, Ant & mehr 8
M Error code 409 maven Tools - Maven, Gradle, Ant & mehr 5
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
M durch Maven wird "var" nicht gefunden Tools - Maven, Gradle, Ant & mehr 4
N Maven Intellij Maven Projekt erstell keine src Tools - Maven, Gradle, Ant & mehr 4
LimDul Maven Einzelne Unit Tests in Maven Builds skippen Tools - Maven, Gradle, Ant & mehr 3
M Maven jpackage-image wird nicht gefunden Tools - Maven, Gradle, Ant & mehr 22
M javafx wird in einem alten programm nicht bei maven gefunden Tools - Maven, Gradle, Ant & mehr 15
L Maven IntelliJ, Maven und JavaFX + SceneBuilder Tools - Maven, Gradle, Ant & mehr 23
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
Kirby.exe Projekt mit Maven kompilieren Tools - Maven, Gradle, Ant & mehr 13
P Maven Projekt Abhängigkeiten auf bekante Schwachstellen prüfen Tools - Maven, Gradle, Ant & mehr 4
H Maven dependency Problem ? Tools - Maven, Gradle, Ant & mehr 23
B Maven und Intellij Tools - Maven, Gradle, Ant & mehr 24
P Maven Test werden nicht ausgeführt . Junit . Maven . Surefire . Eclipse Tools - Maven, Gradle, Ant & mehr 12
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
M Was ist besser für den Anfang, Maven oder Gradle? Tools - Maven, Gradle, Ant & mehr 6
P Maven Wie die Maven Project version in JSP page verwenden? Tools - Maven, Gradle, Ant & mehr 2
C Maven Multi-Module Projekt Tools - Maven, Gradle, Ant & mehr 2
T Maven Warnings/Fehlermeldungen Tools - Maven, Gradle, Ant & mehr 12
T Maven und Datenbank(treiber) Tools - Maven, Gradle, Ant & mehr 13
T Maven Runnable Jar Tools - Maven, Gradle, Ant & mehr 5
T Grundlagen Maven und Git/Github Tools - Maven, Gradle, Ant & mehr 2
LimDul Maven Maven Surefire Plugin - Warnings upgrade Tools - Maven, Gradle, Ant & mehr 2
G Maven upload Tools - Maven, Gradle, Ant & mehr 0
K Maven - Parent oder Dependency? Tools - Maven, Gradle, Ant & mehr 5
B Maven Maven deploy Tools - Maven, Gradle, Ant & mehr 4
H Jenkins keine Tests gefunden - aber in Maven Tools - Maven, Gradle, Ant & mehr 30
P Mit Maven einen spezifischen Branch nach Tag-Parameter erstellen (in Jenkins-Job) Tools - Maven, Gradle, Ant & mehr 3
P Nur einen Teilbaum in Maven releasen? Tools - Maven, Gradle, Ant & mehr 7
D Cannot invoke "javafx.scene.control.MenuButton.getScene()" nach konvertierung zu maven Tools - Maven, Gradle, Ant & mehr 3
H Maven - keine Durchführung von Tests Tools - Maven, Gradle, Ant & mehr 12
H Jenkins - maven-jar-plugin - kein jar-file Tools - Maven, Gradle, Ant & mehr 38
P JavaFX jar mit Maven Tools - Maven, Gradle, Ant & mehr 9
P Maven & Intellij Modul kann nicht aufgelöst werden Tools - Maven, Gradle, Ant & mehr 12
H Eclipse JUnit erzeugt Fehler im Maven-Test Tools - Maven, Gradle, Ant & mehr 1
H Maven Anfängerproblem - No plugin found for prefix 'archetype' in the current project and in the plugin groups Tools - Maven, Gradle, Ant & mehr 25
sascha-sphw Maven vs Gradle Tools - Maven, Gradle, Ant & mehr 24
D Maven Maven und die Build-Geschwindigkeit Tools - Maven, Gradle, Ant & mehr 11
K Maven IntelliJ + Maven + JavaFX Tools - Maven, Gradle, Ant & mehr 2
K Maven install schlägt fehl Tools - Maven, Gradle, Ant & mehr 10
I Problem: Maven import extern Lib Tools - Maven, Gradle, Ant & mehr 3
Tom299 Maven Maven funktioniert nach Installation nicht Tools - Maven, Gradle, Ant & mehr 1
I Maven Interface hinzugefügt - Error Tools - Maven, Gradle, Ant & mehr 1
M Verständnisfrage Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven installieren - "Befehl wurde nicht gefunden" Tools - Maven, Gradle, Ant & mehr 1
E Maven: Wie Abhängigkeiten analysieren? Tools - Maven, Gradle, Ant & mehr 0
E Maven Maven distributionManagement Vererbung in child POM Tools - Maven, Gradle, Ant & mehr 8
P Maven Parent- Child POMs Tools - Maven, Gradle, Ant & mehr 13
E Release Kandidaten mit Maven bauen Tools - Maven, Gradle, Ant & mehr 4
C Orderstruktur bei Libarys - Wie mit Ant oder Maven lösen? Tools - Maven, Gradle, Ant & mehr 0
G Maven, finde Dependency nicht... Tools - Maven, Gradle, Ant & mehr 2
G Maven Continious Integration mit Jenkins, Maven und Nexus - wie richtig? Tools - Maven, Gradle, Ant & mehr 1
P Maven Parent und Child Poms - dependencies Tools - Maven, Gradle, Ant & mehr 1
reibi Maven Maven + Eclipse Tools - Maven, Gradle, Ant & mehr 0
P Maven add resource Tools - Maven, Gradle, Ant & mehr 0
D [Maven Pluginentwicklung] - Plugin das nur auf Parent pom läuft Tools - Maven, Gradle, Ant & mehr 0
S Maven Maven und Auflösen von JSF EL Tools - Maven, Gradle, Ant & mehr 5
H Maven HSQLDB in den Maven lifecycle einbinden Tools - Maven, Gradle, Ant & mehr 5
S Maven Unterschiedliche Deployments mit Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven buildnumber-maven-plugin / Formatproblem mit timestamp Tools - Maven, Gradle, Ant & mehr 17
P Erzeugen von WebServices mit Maven und Eclipse (external Tool) Tools - Maven, Gradle, Ant & mehr 2

Ähnliche Java Themen

Neue Themen


Oben