# Maven : distributionManagement zentral ablegen



## reibi (14. Jan 2010)

Hallo

Wenn ich über "mvn deploy" mein project builden und in ein entfertes Repository hochladen will, dann muss ich die pom-Datei des Projektes so anpassen, dass Maven weiss das dieser Artifakt dann in "myRepo1" hochgeladen weden soll. 

Klar : irgenwoher muss er das ja wissen:

Für mich stellt sich aber die Frage: Wenn man nur ein Repository-Manager hat(wie ich Artifactory) und da drin nur ein Repository benutzt(wie ich "myRepo1") und alle Projekte/Artifakte sowieso dort drin landen sollen, dann wär es ja schön, wenn man das zentralisieren könnte. 
So muss ich jeweils das durch "archetype:create" erzeugte pom anpassen. Das müsste ich nicht wenn ich das "Entwicklungsteam-repo" zentral hinterlegen könnte.

Ginge sowas z.B. in der settings.xml?

Danke und Gruss


----------



## byte (14. Jan 2010)

Ab in die settings.xml oder alternativ eine Parent POM.


----------



## reibi (14. Jan 2010)

byte hat gesagt.:


> Ab in die settings.xml



Hallo : würd das auch gern machen weiss nur nicht wie ich folgendes Konstrukt in der server.xml reintu. ;-)



```
<project>
	...
		<distributionManagement>
		<repository>
		  <uniqueVersion>false</uniqueVersion>
		  <id>repo1</id>
		  <name>DCE-Repository</name>
		  <url>http://localhost:8080/artifactory/repo1</url>
		  <layout>default</layout>
		</repository>
	  </distributionManagement>
	...
	</project>
```

Danke ;-)


----------



## kama (14. Jan 2010)

Hallo,
das Konstrukt gehört auch in die pom.xml und nicht in die settings.xml....Abgesehen davon, dass ich Angabe "localhost" hier für falsch halte....
Siehe auch hier Maven - POM Reference

EDIT: Hatte das "artifactory" nicht gesehen...auf dem Localhost ein Artifactory laufen..Ok Ok...warum nicht..
MfG
Karl Heinz Marbaise


----------



## reibi (15. Jan 2010)

Hallo Kama

also localhost ist nur zum testen. Endgültigläuft das dann auf ner anderen Maschine.

Zu Pom und settings: Also mein ziel ist, dass ich das nichtjedesmal, demdem Project sagen will, wo sein Repo rumliegt. Ich will gerne ein standardpom benutzen und dort ausschliesslich projektspezifische änderungen machen müssen. Das Repo geht alle Projekte/Artifakte etwas an. Ich hab auch kein zweites laufen

Danke und Grußlinger ;-)


----------



## kama (15. Jan 2010)

Hallo Reibi,



reibi hat gesagt.:


> also localhost ist nur zum testen. Endgültigläuft das dann auf ner anderen Maschine.


Hatte ich mir gedacht....



> Zu Pom und settings: Also mein ziel ist, dass ich das nichtjedesmal, demdem Project sagen will, wo sein Repo rumliegt. Ich will gerne ein standardpom benutzen und dort ausschliesslich projektspezifische änderungen machen müssen. Das Repo geht alle Projekte/Artifakte etwas an. Ich hab auch kein zweites laufen


Dann erstelle eine Parent POM in der das drin steht und alle anderen POM erben davon und gut ist....dann steht es genau in einer POM drin ....

MfG
Karl Heinz Marbaise


----------



## reibi (15. Jan 2010)

> Dann erstelle eine Parent POM



OK, ich hätt dann gerne sowas:

Weiss nur nich wie man das verankert und wo die rumliegen muss.

Muss ich die dann selber noch in der ChildPom angeben, oder kann sowas automatisch auch generiert werden?

Gruss und guten Appetit ;-)


----------



## kama (15. Jan 2010)

Hallo Reibi,

Du erstellst ein "mini Projekt", dass nur aus einer POM besteht und dort schreibst Du das rein was Deine Projekte benötigen z.B. distributionManagement...und eventuelle noch mehr....


```
<project ...>

<groupId>de.somedomain.projects</groupId>
<artifactId>project-parent</artifactId>
<version>1.0-SNAPSHOT</version>

<distributionManagement>...</distributionManagement>...
<scm>....</scm>
```

Das Projekt erstellst Du und deployst es dann in den Artifactory....wenn alles richtig konfiguriert ist, kannst Du das einfach per: mvn deploy machen....(vorher bitte ein mvn releaserepare)...

Dann können alle anderen Projekte das wie folgt machen:

```
<project ...>

   <parent>
    <groupId>de.somedomain.projects</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0</version>
  </parent>

....
</project>
```

So die haben dann alles was man braucht und brauchen nur das projektspezifische anzupassen...

kann man auch einfach sehen was vererbt wurde per mvn help:effective-pom ....

MfG
Karl Heinz Marbaise


----------



## reibi (15. Jan 2010)

Hallo Kama

Also erstmal: super Erklärung und vielen Dank fürs Beispiel ;-)



> Dann können alle anderen Projekte das wie folgt machen:
> 
> <project><parent>...<parent>..<project>



Kann man dasbein erstellen noch automatisieren? Aslo so dass er das bei "archtype:create" automatisch mit ins pom reinschreibt?


Grussli ;-)


----------



## kama (15. Jan 2010)

Hallo,

Du kannst Dir ja einen eigenen Archetype erstellen...wo dann alles Drin ist....

EDIT: Hier kann man nachlesen wie es geht: Maven - Guide to Creating Archetypes

MfG
Karl Heinz Marbaise


----------



## reibi (18. Jan 2010)

Also vielen Dank fürs Beispiel: Funktioniert prima ;-)

Aber noch mal der andere Weg: 


> Ab in die settings.xml



Gibts auch so n Beispiel? Also dass man das <distributionManagement> tatsächlich in die server.xml auslagern tut?

Gruss ;-)


----------

