2016-10-25 3 views
-1

In Eclipse können Sie leicht Abhängigkeiten (d. H. Eine JAR-Datei) zu Ihrem Projekt hinzufügen. Klicken Sie mit der rechten Maustaste auf das Projekt und klicken Sie auf -> Pfad erstellen -> Bibliotheken hinzufügen.Maven fügt Abhängigkeiten zum Projekt hinzu

Jetzt wird eine versteckte Datei im Projekt ".classpath" erstellt. Innerhalb dieser Datei ist ein classpathentry so jetzt habe ich die Bibliotheken durch Hinzufügen es in einer Java-Datei verwenden kann:

import foo.bar.*; 

Diese „Anwendung“ nun auf ein einziges Glas exportiert werden kann.

Wie kann ich dies mit Maven und ohne Finsternis erreichen? Ich wechselte zu Emacs ... :)

Mit dem Befehl:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-cli -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

ich selbst bekommen eine Probe Startanwendung. in einem Src-Ordner ist eine App.java-Datei schreiben "Hallo Welt" auf einer Kommandozeile.

mit folgendem in dem pom.xml ich mir ein Glas in meinem Projekt erhalten (Maven indedependent Deployment) erfolgreich:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
     <id>copy</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
        <groupId>com.mycompany.third-party</groupId> 
     <artifactId>commons-cli-archetype</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>jar</type> 
     <overWrite>false</overWrite> 
     <!--${project.basedir}  ${project.build.directory} --> 
     <outputDirectory>${project.basedir}/resources/repo</outputDirectory> 
     <destFileName>optional-new-name.jar</destFileName> 
      </artifactItem> 
      </artifactItems> 
      <outputDirectory>${project.basedir}/resources/repo</outputDirectory> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Nun, wie kann ich dieses Glas in meinem App.java benutzen? Muss ich eine .classpath-Datei manuell erstellen? Wie kann ich meine Klassenpatente automatisch anordnen? Ich habe versucht, eine manifest.MF mit den Klassenzuordnungen zu erstellen, aber ohne Erfolg. Ich habe mehrere Tutorials ausprobiert.

Ich hatte keinen Erfolg mit:

 <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <includes> 
    <include>${project.basedir} 
    /resources/repo/optional-   new-name.jar</include> 
     </includes> 
    </configuration> 
    </plugin> 

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-jar-plugin</artifactId> 
<configuration> 
    <archive> 
     <manifest> 
       <addDefaultImplementationEntries>true 
    </addDefaultImplementationEntries> 
      <addClasspath>true</addClasspath> 
      <mainClass>your.main.Class</mainClass> 



     </manifest> 
     <manifestEntries> 
      <Class-Path>${project.basedir}/resources/repo</Class-Path> 

     </manifestEntries> 

    <manifestFile> 
    <!-- 
     ${project.build.outputDirectory}/META-INF/MANIFEST.MF 

    --> 
    ${project.basedir}/META-INF/MANIFEST.MF 
     </manifestFile> 

    </archive> 

<!-- 
    <archive> 
    <manifest> 
     <mainClass>com.mkyong.core.App</mainClass> 
    </manifest> 
    </archive> 
    --> 


</configuration> 

nach manuell MANIFEST.MF zu schaffen.

nach dem Befehl

mvn clean install 

die MANIFEST.MF bleibt leer.

Hilfe wäre willkommen.

Danke!

+1

Es ist mir nicht klar, was Sie erreichen möchten? Welche Art von Glas möchten Sie bauen? Warum willst du ein "Glas im Projekt" haben? –

+0

Ja. In der app.java Datei möchte ich mein jar importieren. Und benutze seine Klassen. Genauso wie du eclips verwendest und deinem Projekt eine Bibliothek hinzufügst. –

+0

Mit Maven installieren Sie Ihre Gläser in das lokale Repository oder stellen sie in einem Nexus/Artefactory bereit. Dann referenzieren Sie sie als in der Pom-Datei. Gibt es einen Grund, warum du es nicht so machen willst? –

Antwort

1

+1 für nicht mit Eclipse; ^)

Wenn Sie suchen, Code aus einem anderen JAR verweisen dann versuchen Sie, die folgenden zu Ihrem POM:

<dependencies> 
    <dependency> 
     <groupId>xxx</groupId> 
     <artifactId>yyy</artifactId> 
     <version>zzz</version> 
    </dependency> 
</dependencies> 

Wo xxx, yyy und zzz sind Die Maven-Koordinaten für die JAR, die Sie importieren möchten.Sie können diese von Ihrem Nexus

bearbeiten erhalten:

So zum Beispiel, wenn Sie Joda Zeit zu importieren suchen würde es

<dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.6</version> 
    </dependency> 

sein, wenn Sie den Inhalt aller zu kombinieren suchen Ihre Abhängigkeiten mit Ihrem Code und release sie als eine einzige JAR dann möchten Sie vielleicht einen Blick auf die Maven-Schatten-Plugin. Siehe How to package a jar and all dependencies within a new jar with maven

Und eine andere Sache, sollten Sie nie mit der Datei .classpath spielen. Dies ist etwas Eclipse-spezifisch. Ändern wird nicht Maven und wird wahrscheinlich zu verwechseln Eclipse

+0

Vielen Dank für Ihre Antwort. Seit Tagen kämpfe ich tagelang. –

+0

Was anstelle des .classpath kann ich verwenden. –

+0

Ich habe versucht: http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/. Ich habe keine Code-Vervollständigung mit meinen Emacs. Bei diesem Beispiel war ich froh, dass ich erfahren habe, wie man die Importe in der App.java-Datei verwendet. Aber aber mit der Eclipse .classpath. Wie kann ich die Importe ohne es verwenden? Ich hatte auch den Fehler: "org.dstovall: onejar-maven-plugin: 1.4.4 oder eine seiner Abhängigkeiten konnte nicht aufgelöst werden:". Jemand? Gibt es eine einfache Möglichkeit, dies zu vermeiden? –

0

Got it! Ich folgte diesem Tutorial, bis Schritt 5. http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/

Statt Schritt tun 5 I hinzugefügt:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

Zum pom. und voila:

mvn package 

und

java -jar target/dateutils.jar 

Jetzt funktioniert es.

Also danke für deine Hilfe Stormcloud! Also was ist passiert? Immer noch keine Ressourcen in meinem .jar gefunden. Das Glas wurde schattiert. https://maven.apache.org/plugins/maven-shade-plugin/ Was ist, wenn ich mein Glas auf einem Server ohne Maven exportieren möchte. So, wie man ein komplettes Arbeitsglas exportiert?

Danke nochmal!

+0

Die Ressourcen wo im Glas! Ich hatte so viele Versuche. Ich habe in den falschen Ordner geschaut. : D –

+0

Sie können eine funktionierende XML-Beschreibung für das Schatten-Plugin in dem Link, den ich zuvor hinzugefügt habe, finden – Stormcloud

Verwandte Themen