# (Gradle) Wie die JAR eines 2. Projektes "includieren"



## Tom299 (30. Jun 2015)

Hi,

ich bin mit Gradle erst seit einigen Wochen am arbeiten und bis jetzt hab ich alles so hinbekommen, wie ich wollte. Allerdings hab ich einen "Trick" benutzt, um eine lokale JAR ins Projekt zu bekommen: Ich hab einfach im anderen Projekt eine JAR exportiert, und dann im aktuellen Projekt die JAR unter libs abgelegt und im build.gradle dann folgendes hinzugefügt:


```
dependencies {    
    // lokales JAR-File
    compile files ('lib/customcontrol.jar')
}
```

Das hat für den Anfang funktioniert, doch jetzt möchte ich, daß Gradle weiß, daß ich die JAR des Projektes benutzen will und wenn ich die JAR aktualisiere, dann soll die Aktualisierung natürlich in mein abhängiges Projekt übernommen werden.

Ich hab folgendes beim googeln gefunden:

```
dependencies {
   compile project(':AnderesProjekt')
}
```

Dafür habe ich jetzt 2 Mini-Projekte angelegt, um das zu testen, aber da klappt das mit der Abhängigkeit NICHT. 

MyGradleLibrary hat eine Klasse:

```
package de.library;

public class TestMe {

	private String testString;
	
	public TestMe(String testString) {
		this.testString = testString;
	}
	
	public String getTestString() {
		return this.testString;
	}
}
```

und build.gradle

```
apply plugin: 'java'
```
Das läßt sich (erwartungsgemäß) ohne Probleme bauen.

MyGradleProgram hat 2 Klassen, eine simple Datenklasse und eine Start-Klasse mit der main()-Methode:

```
package de.programm;

public class Person {

	private String name;
	private String vorname;
	
	public Person() {
		
	}

	public Person(String vorname, String name) {
		this.vorname = vorname;
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	
	@Override
	public String toString() {
		return this.vorname + " " + this.name;
	}
}
```


```
package de.programm;

import de.library.TestMe;

public class Start {

	public static void main(String[] args) {
		System.out.println("Starte ...");
		
		Person p = new Person("Tom", "Cruise");
		System.out.println(p);
		
		TestMe testMe = new TestMe("test1234");
		System.out.println(testMe.getTestString());
	}

}
```

Das build.gradle sieht im Moment so aus:

```
apply plugin: 'java'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
}

dependencies {
    //compile project(':MyGradleLibrary')
    
    // local files
    compile files ('lib/MyGradleLibrary-1.0.jar')
}

jar {
	// Name der Jar-Datei
	baseName='MyGradleProgram'
	version='1.0'
	
	from configurations.compile.collect { zipTree it }
	manifest.attributes 'Main-Class' : 'de.programm.Start'
}
```

So funktioniert es, allerdings liegt die JAR der Library im lib-Verzeichnis von Program. Wenn ich dann compile files rausnehme und stattdessen compile project(':MyGradleLibrary') benutze, dann bekomm ich die Meldung:

```
FAILURE: Build failed with an exception.

* Where:
Build file 'D:\WS_TEST\MyGradleProgram\build.gradle' line: 11

* What went wrong:
A problem occurred evaluating root project 'MyGradleProgram'.
> Project with path ':MyGradleLibrary' could not be found in root project 'MyGradleProgram'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED
```

Gradle meckert wegen dem Pfad, ich weiß aber nicht, wie ich den Pfad angeben kann oder wo. Wenn ich ein neues Eclipse-Gradle-Projekt anlege und als Sample-Projekt multi-flat wähle, dann steht im build.gradle auch nur compile project('rojectname'). Ich verstehe das nicht, warum es dort funktioniert ohne Pfadangabe.

Kann mir jemand einen Tip geben? ???:L


----------



## Tom299 (1. Jul 2015)

Ok, wenn man die Projekt-Struktur richtig anlegt, funktioniert es auch


----------

