# Gradle localPublish POM



## JimWiesel (2. Jul 2019)

Hallo

ich habe ein *Gradle* Projekt das mehrere SubProjekte hat

MeinProjekt
-- MeinProjekt-API
-- MeinProjekt-Database
-- MeinProjekt-Dependencies
usw.
usw.

in dem SubProjekt -Dependencies ist ein build.gradle (aktuell leer) und ein reichlich gefülltes pom.xml

ich würde das pom.xml gerne als mavenBOM importieren wie ich es auch mit den spring-boot-dependencies mache
damit meine Tasks und Subprojekte das aber finden muss ich das aber zunächst per local publish "bekannt" machen (so habe ich es zumindest verstanden)

ich bin jetzt bei der Recherche bei MavenAntTasks gelandet
zum einen verstehe ich aber nicht so Recht was Ant damit zu tun hat und zum anderen scheint das aber auch nicht die Lösung zu sein weil es anscheinend veraltet ist



			Maven Ant Tasks - Introduction
		

*Note: This component is retired. It is no longer maintained.*

Wie macht man es richtig?

kleine Nachtrag:
das Projekt dient als "Kern" für mehrere Kundenprojekte
die Kundenprojekte binden den Kern ein und sollen das pom auch als import einbinden damit überall sichergestellt ist das die richtigen dependencies und Versionen benutzt werden

vielen dank
das Wiesel


----------



## thecain (2. Jul 2019)

`mvn install:install-file -Dfile=pom.xml -DpomFile=pom.xml`

sollte mMn reichen um ein pom lokal zu installieren.


----------



## JimWiesel (2. Jul 2019)

das geht auch mit Gradle?


----------



## thecain (2. Jul 2019)

Den publish musst du mit maven machen. Dann kannst du das bom aus dem lokalen repo laden


----------



## JimWiesel (2. Jul 2019)

kann man das auch aus einem gradle Task heraus machen oder muss man das immer per Terminal/console machen?

sorry für die blöden fragen
ich hatte schon nach aktueller Literatur gefragt 





						Aktuelle Literatur zu Gradle?
					

Hallo  ich habe zwar schon gesucht aber leider nichts aktuelles gefunden  - Gradle in Action von 2013 - Gradle ein kompakter Einstieg von 2014 und paar sachen von 2015 und 2016   aktuell ist das aber alles nicht die Bücher starten meist mit der Erklärung des "Left-Shift" "doLast" was ja aber...



					www.java-forum.org
				




aber da scheint es wohl nichts zu geben


----------



## thecain (2. Jul 2019)

Nicht das ich wüsste.

Die offizielle Doku ist doch sehr gut mMn: https://docs.gradle.org/5.5/userguide/userguide.html


----------



## JimWiesel (2. Jul 2019)

ja da hatte ich natürlich auch schon reingeschaut 


			Publishing
		



			Maven Publish Plugin
		


Wahrscheinlich ein Problem mit einem riesigen historisch gewachsenen Projekt zu beginnen


----------



## JimWiesel (3. Jul 2019)

ok 
hier scheint das Problem gewesen zu sein das ich im pom file etwas zu sehr "aufgeräumt" habe, mit version im pom.xml scheint es zu funktionieren

aber:
gibt es eine Möglichkeit per Gradle die Version in einem pom.xml zu setzen

habe nur gefunden:

```
mvn versions:set
```

aber Maven soll eig nicht benutzt werden


----------



## JimWiesel (5. Jul 2019)

die Version hab ich jetzt per regEx gelöst


```
def regexVersion = "<PROJEKTNAME.version>.+<\\/PROJEKTNAME.version>"
def newVersion = "<PROJEKTNAME.version>${buildEnv.specificVersion}</PROJEKTNAME.version>"
def pomFile = 'PROJEKTNAME-dependencies/pom.xml'

String newText = readFile(pomFile).replaceAll(regexVersion,newVersion)
writeFile file:pomFile, text: newText
```

da funktioniert auch 
jetzt das nächste Problem 
das pom das im Artifactory landet ist leer (bis auf meta daten, also keine dependencies usw.)
mühsam ernährt sich das Eichhörnchen


----------



## mrBrown (5. Jul 2019)

JimWiesel hat gesagt.:


> jetzt das nächste Problem
> das pom das im Artifactory landet ist leer (bis auf meta daten, also keine dependencies usw.)


Also pom im Projekt und pom im Artifactory (dachte das soll nur ins lokalen Repo?) haben unterschiedlichen Inhalt?


----------



## JimWiesel (5. Jul 2019)

ja im ersten schritt sollten meine subprojekte das finden
jetzt möchte ich das pom file zu artifactory hochladen, damit die Kundenprojekte das POM als mavenBOM importieren können
(damit es so funktioniert wie mit spring-boot-dependencies) 

wenn ich aber jetzt ein Kundenprojekt bauen möchte in dem das POM importiert wird findet es die ganze Dependencies nicht
Blick ins Artifactory zeigt mir das POM so:


```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.XXX.YYY</groupId>
  <artifactId>PROJEKTNAME-dependencies</artifactId>
  <version>XXXXX-SNAPSHOT</version>
  <packaging>pom</packaging>
  <dependencyManagement>
    <dependencies/>
  </dependencyManagement>
</project>
```

in meinem Projekt sind aber zahlreiche Dependencies im POM File definiert 

ich hab jetzt natürlich schon die gradle docu bemüht aber die dortigen Sachen verstehe ich nicht so richtig, MavenDeployer etc


----------



## JimWiesel (11. Jul 2019)

scheint als wurde eine Lösung gefunden 
das Pom.xml wurde "aufgelöst" und komplett in build.gradle übertragen 

gradle übernimmt nun den localPublish (zu einem pom) und das deploy zu artifactory funktioniert auch 
mal schauen was die Kundenprojekte von dem generierten pom halten


----------

