Maven Sources + JavaDoc benutzen

Meldanor

Bekanntes Mitglied
Hi Leute,

bei Eclipse kann ich bei normalen Projekten ohne Maven für jede eingebundene .jar einen Ordner für die Sources und einen für die JavaDocs angeben, so dass Eclipse sich beim Arbeiten damit darauf bezieht und z.B. die JavaDoc ausgibt.
Wie mache ich das bei einem Maven Projekt, wo der Quellcode auf einem GitRepo auf GitHub liegt und die .jar ohne die Sources und ohne Javadocs in dem Jar auf Artifactory liegen?
Muss ich die Sources/JavaDoc extra mit in den .jar einbinden und dann irgendwo bei der Dependency angeben, dass die Sources/Javadoc in der .jar mit drine sind?

Danke für die Antworten :D

Mfg
Mel
 

kama

Top Contributor
Hi,
dazu gibt es im Prinzip zwei Vorgehensweisen:

1. Der Jar-Erzeuger sollte korrekte Artefakte liefert wo auch ein -sources artefact zugehört (JavaDoc Seite ist auch sehr hilfreich)...und dann in ein entsprechendes Repository deployen...

2. Du kannst auch bei Maven Dependencies in Eclipse im Projekt Maven Dependencies -> xyz.jar Rechts-Click darauf und dann manuell die Daten dort angeben (also Sourcen / JavaDoc o.ä.)...

Gruß
Karl Heinz Marbaise
 

Meldanor

Bekanntes Mitglied
Hi,
2. Du kannst auch bei Maven Dependencies in Eclipse im Projekt Maven Dependencies -> xyz.jar Rechts-Click darauf und dann manuell die Daten dort angeben (also Sourcen / JavaDoc o.ä.)...

Diese Methode würd ich sehr ungerne nutzen, da ich nicht alleine Arbeite, sondern im Team und dort gerade Maven eingeführt wird(wir haben natürlich alle kaum Ahnung davon :lol: )

kama;852992 1. Der Jar-Erzeuger sollte korrekte Artefakte liefert wo auch ein -sources artefact zugehört (JavaDoc Seite ist auch sehr hilfreich)...und dann in ein entsprechendes Repository deployen... [/QUOTE hat gesagt.:
Ok, ich hab hier diese POM

[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>de.minestar</groupId>
<artifactId>GreenMile</artifactId>
<version>1.0</version>
<name>GreenMile</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<repositories>
<repository>
<id>bukkit-releases</id>
<url>http://repo.bukkit.org/content/repositories/releases</url>
</repository>
<repository>
<id>Minestar</id>
<url>http://test.minestar.de:8081/artifactory</url>
</repository>
</repositories>

<dependencies>
<!-- Bukkit -->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.0.1-R1</version>
<scope>compile</scope>
</dependency>

<!-- MineStar -->
<dependency>
<groupId>de.minestar</groupId>
<artifactId>MineStarLibrary</artifactId>
<version>2</version>
</dependency>
<dependency>
<groupId>de.minestar</groupId>
<artifactId>FalseBookCore</artifactId>
<version>1</version>
</dependency>
</dependencies>

<build>
<sourceDirectory>${basedir}/src</sourceDirectory>

<!-- Resources -->
<resources>
<resource>
<targetPath>.</targetPath>
<filtering>true</filtering>
<directory>${basedir}/src</directory>
<includes>
<include>plugin.yml</include>
</includes>
</resource>
</resources>

<!-- Plugins -->
<plugins>
<!-- Compile plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>

<!-- JAR creation plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
</plugin>

<!-- Assembly -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>${basedir}/src/main/assembly/default.xml</descriptor>
</configuration>
</plugin>

<!-- Release -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<preparationGoals>assembly:assembly</preparationGoals>
<goals>assembly:assembly</goals>
</configuration>
</plugin>

<!-- Exclude non-tests -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<excludes>
<exclude>**/TestOfflinePermissible.java</exclude>
</excludes>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>de.minestar:MineStarLibrary</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<organization>
<name>MineStar</name>
</organization>
</project>[/XML]

Die Dependency "MineStarLibrary" ist unsere eigene Library und diese haben wir bisher immer so auf das Artifactory hochgeladen:
Da MineStarLibrary noch kein Maven Projekt ist, haben wir es mit Eclipse als .jar exportiert über "Rechtsklick auf das projekt"->"Export"->"Jar File"->"Export generated class files and ressources".
Dann haben wir die neue Jar über das WebInterface auf Artifactory hochgeladen und automatisch eine POM generieren lassen mit neuer Version.

Wie müssten wir das handhaben, dass folgendes geschieht->
Neue Version von der Library wird erstellt(soll nicht bei jedem neuen Commit auf GitHub erstellt werden) und soll dann bei Artifactory hochgeladen werden.
In den Projekten, die diese Library nutzen, soll nun das Artefakt als auch der Quellcode/JavaDoc runtergeladen werden. Wie machen wir das, dass er die SOurces und den JavaDoc eienrseits in das Artefakt miteinbindet, so dass es bei der Dependency beim Projekt automatisch mit runtergeladen wird?

Danke für die Antworten :)

Mfg
Mel
 

schalentier

Gesperrter Benutzer
Soweit ich weiss, ist die Maven Unterstuetzung in Eclipse eher... mager. Ist der Einsatz von Eclipse gesetzt, oder seid ihr da flexibel?

Denn ich wuerde da einfach mal auf IntelliJ verweisen, dort ist Maven direkt und out of the box integriert. Einfach ein pom.xml oeffnen (New Project -> Maven) und alles ist eingerichtet. Sourcen und JavaDoc kannste per Mausklick laden (das wird natuerlich auch direkt in die Pfadeinstellungen eingebunden) - sofern, wie kama sagte, die Abhaengigkeit die entsprechenden Artefakte bereitstellt. Das alles geht auch in der kostenlosen, freien Community Edition.
 

Meldanor

Bekanntes Mitglied
Eclipse ist dort festgesetzt, da wir uns auf Eclipse sehr lange eingeschossen haben, mit der Unterstützung von Maven sind wir dort aber auch nicht gerade zufrieden.
Wenn ich wüsste, wo in der pom.xml oder irgendwo das manuel ändern kann, wäre damit auch schon alles in Ordnung :D

sofern, wie kama sagte, die Abhaengigkeit die entsprechenden Artefakte bereitstellt.
Und wie mache ich das? Muss ich jetzt bei der Library eine Abhängigkeit zu dem .jar mit den Sources und eine Abhängigkeit zu der .jar mit den JavaDocs bereit stellen?
 

kama

Top Contributor
Hallo,

ich habe mir mal die POM von GreenMile angeschaut und kriege das Schaudern....

Warum ist dort ein Pfad ${basedir}/src festgelegt? Wozu gibt es Maven Konventionen src/main/java die Java Sourcen, src/main/resources die Resources src/test/java Unit Tests etc....

Warum wird im Release Plugin die preparationGoals, goals usw. überschrieben mit assembly? Hier herrscht wohl Unverständnis für den Maven Build-Life-Cylce...? Das macht überhaupt keinen sinn...Weiterhin gehören in eine POM Keine Repository Definition wie angegeben rein, dafür nutzt man eben einen Artifactory, Nexus oder Archiva...

Ein Release Zyklus eines Maven Projektes läuft so: Version 1.0-SNAPSHOT

Code:
mvn release:prepare 

mvn release:perform

bei richtig konfiguriertem Projekt werden damit die entsprechenden Artefakte (version: 1.0) in das Repository übertragen auch JavaDoc und Sources Paket......dazu ist es aber Notwendig distributionManagement anzugeben und zu konfigurieren weiterhin ist der SCM Bereich Notwendig...Danach ist die nächte Version in diesem Falle "1.1-SNAPSHOT" und dann geht das Ganze von Vorne los...
Zwischenzeitlich kann man sog. SNAPSHOT's deployen damit Zwischenstände möglich sind....kann man einfach per mvn deploy erreichen....

Wenn dass dann alles richtig gemacht wurde, kann man in Eclipse auf der Konfigurationsseite von Maven auch einfach per CheckBox aktivieren, ob man Sources/JavaDoc Pakete dazu haben will....

Habt Ihr eine CI System ? (Jenkins/Hudson/Bamboo/TeamCity ?)

Mir Scheint Ihr hättet eine ausführliche Schulung zum Thema Maven/CI/RPM Nötig....

Edit: Achso Sourcen anhängen: https://github.com/khmarbaise/maven-training/tree/master/045-project-with-sources

Gruß
Karl Heinz Marbaise
 
M

maki

Gast
Soweit ich weiss, ist die Maven Unterstuetzung in Eclipse eher... mager. Ist der Einsatz von Eclipse gesetzt, oder seid ihr da flexibel?

Denn ich wuerde da einfach mal auf IntelliJ verweisen, dort ist Maven direkt und out of the box integriert. Einfach ein pom.xml oeffnen (New Project -> Maven) und alles ist eingerichtet. Sourcen und JavaDoc kannste per Mausklick laden (das wird natuerlich auch direkt in die Pfadeinstellungen eingebunden) - sofern, wie kama sagte, die Abhaengigkeit die entsprechenden Artefakte bereitstellt. Das alles geht auch in der kostenlosen, freien Community Edition.
Du hast wohl das m2e Plugin verpasst ;)
Das alles geht auch mit Eclipse, ohne Probleme.

Den Rest hat kama ja schon gesagt und dem kann ich mir nur anschliessen, wie man Artifakte mit dem classifier sources bzw. javadoc[/c] deployed sollte jedem klar sein und ist schnell erklärt, aber das eigentliche Problem ist ein grundsätzliches Verständnisproblem, solche Poms machen nur Probleme, lieber richtig machen oder sein lassen.
 

Meldanor

Bekanntes Mitglied
Hi,

danke erstmal für die Ausführlichen Antworten als auch für die Geduld mit mir. Ich werde mir mal eine größere Maven Lektüre zu Rate ziehen, hat wer eine parat bezüglich Maven, was irgendwie mit Eclipse arbeitet?

Die POM selber hab ich zusammengebastelt, so dass überhaupt mal was rauskam und das Projekt an sich ist ein älteres Projekt, wo wir jedoch Maven nutzen wollen bzw. irgendwo es hinkriegen wollen, dass jeder die selbe Library Version nutzt, ohne jedoch was zu machen. Da wurde ich halt auf Maven verwiesen und wollte mich nun reinarbeiten, scheinbar ich jedoch grandios gescheitert^^ Danke auf jeden fall :D
 

kama

Top Contributor
Hi,

danke erstmal für die Ausführlichen Antworten als auch für die Geduld mit mir. Ich werde mir mal eine größere Maven Lektüre zu Rate ziehen, hat wer eine parat bezüglich Maven, was irgendwie mit Eclipse arbeitet?
Erarbeite Dir zuerst einmal Maven da Maven eigenständig ist ....und schon ein ganz schöner Brocken ist...

Lektüre:

Books / Support Sonatype.com

Hier wären vier Bücher....wäre mal ein Anfang....(zuerst Maven dann Zusammenspiel Eclipse <-> Maven)...

Die POM selber hab ich zusammengebastelt, so dass überhaupt mal was rauskam und das Projekt an sich ist ein älteres Projekt, wo wir jedoch Maven nutzen wollen bzw. irgendwo es hinkriegen wollen, dass jeder die selbe Library Version nutzt, ohne jedoch was zu machen. Da wurde ich halt auf Maven verwiesen und wollte mich nun reinarbeiten, scheinbar ich jedoch grandios gescheitert^^ Danke auf jeden fall :D
Genau So sieht die auch aus.... ;-)...


Gruß
Karl Heinz Marbaise
 

knoppers

Bekanntes Mitglied
Mal hier ein Buch was ich eigentlich ganz nützlich fand. Liegt bei mir immer auf dem Schreibtisch als kleines Nachschlagewerk. Leider ist dies noch für Maven 2. Zwischen 2 und 3 gibt es ein paar Änderungen die man aber über die Maven Webseite nachlesen kann.

Maven 2: Eine Einführung, aktuell zu 2.0.9: Kai Uwe Bachmann: 9783827328359: Bücher

Da vorher noch das noch über CI-System angemerkt wurde. Hier auch mal ein gutes Buch für das Bekannteste CI-System für die Java Welt. Ist auch eine Lektüre die immer parat auf dem Schreibtisch liegt und als Nachschlagewerk dient. Aber natürlich auch gut für Anfänger ist.

Continuous Integration mit Hudson/Jenkins: Grundlagen und Praxiswissen für Einsteiger und Umsteiger: Simon Wiest: 9783898646901: Bücher

P.S.: Sollte jemand noch andere gute Büchervorschläge haben, freue ich mich über jede Anregung.
 

kama

Top Contributor
Hallo,

die Bücher sind leider schon ein wenig angestaubt......Maven 2.0.9 ;-( da hat sich einges getan ...Maven 3.0.4 Voting läuft gerade...

Das Hudson/Jenkins Buch August 2010 ... ..Seit der Aufspaltung im Januar 2011 hat sich einiges getan...

Hier zum Jenkins (Online als PDF):
Download Jenkins: The Definitive Guide

Die Online Resources seitens Sonatype zu Maven ist nun mal das Aktuelleste....weiterhin kann ich dazu nur die User-Mailing Liste von Maven empfehlen auch die zu Mojo-Codehaus..oder der IRC Chat...

Die Online Liste der Plugins:

Available Plugins
Plugins

und die jeweilige Doku zu den Plugins.

Gruß
Karl Heinz Marbaise
 

Ähnliche Java Themen


Oben