# Maven+Eclipse: Repository im Workspace?



## ralf.zahn (22. Apr 2010)

Hallo,

ich nutze m2eclipse mit dem "Maven Dependencies" Build Path Container. Ich habe eine Reihe von JARs, die im Build Path, während des Maven Builds (auf einem anderen Build-Server) und zur Laufzeit in einem J2EE Application Server verfügbar sein müssen. Letzteres schließt das Ablegen in einem zentral verfügbaren Repository ab.

Ich möchte gerne die JARs in einem Workspace-Projekt ablegen, im Maven Repository-Format. Dafür muss ich aber im POM eine Referenz auf dieses Repository setzen können. Leider funktioniert das nicht.
Hat das jemand schonmal gemacht und kann mir ein Beispiel dafür zeigen, d.h. Auszug aus dem POM.

Ich habe es bisher so im POM, aber das zieht nicht:
[XML]
  <repositories>
    <repository>
      <id>projectinternal</id>
      <url>file://${project.basedir}/lib</url>
    </repository>
  </repositories>
[/XML]

Maven-Version ist 2.1.0, m2eclipse-Version ist 0.9.8


----------



## kama (22. Apr 2010)

Hallo,



ralf.zahn hat gesagt.:


> ich nutze m2eclipse mit dem "Maven Dependencies" Build Path Container. Ich habe eine Reihe von JARs, die im Build Path, während des Maven Builds (auf einem anderen Build-Server) und zur Laufzeit in einem J2EE Application Server verfügbar sein müssen.


Sprich Du hast Dependencies auf die entsprechenden jar's....Die Frage ist auch was sind dass für JAR's. ? Selbst gemachte ? 



ralf.zahn hat gesagt.:


> Ich möchte gerne die JARs in einem Workspace-Projekt ablegen, im Maven Repository-Format. Dafür muss ich aber im POM eine Referenz auf dieses Repository setzen können.


Warum willst Du die in einem Workspace ablegen...dann verlierst Du doch genau die Vorteile bzgl. der Dependencies...

Das ist der Zeitpunkt für einen Repository Manager (Nexus, Archiva, Artifactory) im Netz installieren und gut ist...dort kannst Du solche artefakte dann ablegen...



ralf.zahn hat gesagt.:


> [XML]
> <repositories>
> <repository>
> <id>projectinternal</id>
> ...


Wenn schon dann ${basedir} verwenden...aber das ist nicht der richtige Weg besser Repo Manager...

Gruß
Karl Heinz Marbaise


----------



## ralf.zahn (22. Apr 2010)

Die JARs sind fremde, die nirgends in einem Repository-Format vorliegen.
Ich benötige sie im Workspace, weil der Classloader des Application Servers in der Testumgebung ebenso drauf zugreifen soll.
Repository Manager ist nicht mal einfach so installiert - ich befinde mich in einem firmeninternen Netzwerk, da kann ich nicht (ungefragt) irgendwelche Systeme installieren.


----------



## kama (22. Apr 2010)

Hallo,



ralf.zahn hat gesagt.:


> Die JARs sind fremde, die nirgends in einem Repository-Format vorliegen.


Hm...das ist dann nicht so gut..aber die könnte man, wenn man einen Repo-Manager hätte dort ablegen......Kommerzielle ? oder was ? Ich habe bisher noch alles in Maven Repos gefunden...



ralf.zahn hat gesagt.:


> Ich benötige sie im Workspace, weil der Classloader des Application Servers in der Testumgebung ebenso drauf zugreifen soll.


Das war mir schon klar.....



ralf.zahn hat gesagt.:


> Repository Manager ist nicht mal einfach so installiert - ich befinde mich in einem firmeninternen Netzwerk, da kann ich nicht (ungefragt) irgendwelche Systeme installieren.


Dann aber Maven benutzen? Das lädt doch Sachen aus dem Internet ;-)...
Nein selbstverständlich nicht ungefragt...dann muss man das in die entsprechenden Bahnen lenken...Maven Ohne Repo Manager ist nämlich eine Qual...
EDIT: Was meinst Du wo ich hier sitze...

Das mit mit dem basedir hast Du probiert ? in der?

Was Du aber machen könntest wäre das folgende:

[XML]
<dependencies>
    <dependency>
      <groupId>xyz</groupId>
      <artifactId>xxxt</artifactId>
      <version>4.0</version>
      <scope>system</scope>
      <systemPath>${basedir}/lib/xyz.jar</systemPath>
    </dependency>
[/XML]

EDIT: Der Scope System führt aber dazu, dass das Releasen nicht funktioniert (muss ich nochmal nachlesen)...Nein sollte in Ordnung sein.

Gruß
Karl Heinz Marbaise


----------



## ralf.zahn (22. Apr 2010)

Bei den JARs handelt es sich um Bibliotheken einer kommerziellen Anwendung, die durch Eigenentwicklung an die firmenspezifischen Anforderungen angepasst wird.

Maven ohne Repo-Manager ist öde, das merk ich auch. :autsch:
Andererseits muss es auch simpel gehen.
Die Methode über den system-Scope hat ihren Reiz, weil ich damit diese Bibliotheken überhaupt nicht in einem Repository unterbringen muss. Ich muss das allerdings testen, denn eine Library soll beim Build ins WEB-INF/lib-Verzeichnis kopiert werden, und das verlangt nach Scope "compile".

Das Repository im POM funktioniert auch nicht mit ${basedir}, hab da schon Einiges probiert - mit file://, file:///, ohne protocol, absoluter Pfad im Format "C|/.../..."
In manchen Quellen finde ich die Aussage, dass http:// und file:// verwendet werden können, in anderen wiederrum steht, dass das Laden aus Repositories nur mit http:// funktioniert, das Installieren in ein Repository aber auch mit anderen Protokollen möglich ist. ???:L

Ne andere Frage nebenbei: Gibt es schon irgendwo Beispiele mit Maven3, insbesondere Anwendungen von Incremental Builds bzw. Composition over Inheritation? Find bisher nur Folien, abstrakte Informationen, aber keine konkreten Codebeispiele.


----------



## maki (22. Apr 2010)

Maven2 ohne Repo ist wie Sex ohne Partner, es reicht zum üben aber wirklich gut ist es nicht 

Mal ernsthaft, würde niemals Maven2 proffessionell (für Geld) nutzen ohne Repo Manager, dann lieber ohne Maven.
Artifactory, Nexus, etc. pp.


----------



## ralf.zahn (22. Apr 2010)

Naja, das ist deine Meinung. Ich sitze hier beim Kunden, der bis vor Kurzem ein veraltetes SCM verwendet hat sowie den "Build" der Anwendung ausführte, indem der Entwickler in seiner Eclipse-IDE den Export-Wizard ausgeführt hat. Genau davon will ich wegkommen. Ein Maven-Build ist da ein Anfang, nur den Repo-Manager bekomm ich hier kurzfristig nicht hin.
Sex ohne Partner ist eine gute Alternative, wenn eben mal kein Partner zur Verfügung steht. :toll:


----------

