2017-06-23 1 views
0

Ich habe eine benutzerdefinierte my-commons Bibliothek mit Maven erstellt. Die Gemeinen pom enthält zB folgende Abhängigkeit:Wie erben Abhängigkeiten von anderen Bibliotheken in Maven?

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.4.RELEASE</version> 
     <relativePath/> 
    </parent> 

    <groupId>de.mydomain</groupId> 
    <artifactId>my-commons</artifactId> 
    <version>1.0.0</version> 
    <packaging>jar</packaging> 

    <properties> 
     <!-- workaround for http://jira.codehaus.org/browse/MASSEMBLY-603--> 
     <maven.build.timestamp>${maven.build.timestamp}</maven.build.timestamp> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
    </dependencies> 
</project> 

ich die benutzerdefinierte Bibliothek in meinem lokalen Repository installiert. In einem anderen Projekt verwende ich die Bibliothek erneut. Es löst richtig, so dass es existiert im Repo:

<project ...> 
    <groupId>de.mydomain</groupId> 
    <artifactId>my-core</artifactId> 
    <version>1.0.0</version> 

    <dependencies> 
     <dependency> 
      <groupId>my.domain</groupId> 
      <artifactId>my-commons</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
    </dependencies> 
</project> 

Jetzt in diesem Projekt Ich mag würde eine Klasse org.springframework.web.bind.annotation.ResponseBody verwenden.

Problem: Die Klasse befindet sich nicht im Klassenpfad. So beschwert sich Maven [ERROR] cannot find symbol. Aber warum ?? Ich würde erwarten, dass die Abhängigkeit geerbt wird!

Hinweis: Ich verwende Intellij IDEA, wenn das wichtig ist. Das gleiche Problem gilt für alle "geerbten" Bibliotheken. Die Spring-Web-Bibliothek ist nur ein Beispiel.

+0

yup sollte es funktionieren? Haben Sie sich darüber beschwert, dass Sie Ihre "my-group my-commons 1.0.0" nicht gefunden haben? –

+0

Überhaupt nicht. Ich kann sogar + klicken Sie auf die My-Commons und es öffnet die commons pom.xml korrekt. – membersound

+0

hast du ein jar mit deiner commons pom.xml erstellt? In diesem Glas wird auch "Spring-Boot-Starter-Web" enthalten sein –

Antwort

0

Gefunden: Entfernen der <maven.build.timestamp>...<property> löste das Problem. Ich weiß nicht, warum es verhindert hat, dass die Vererbung richtig funktioniert, vor allem, weil ich keine Fehler bekommen habe.

0

Überprüfen Sie, ob der .m2-Ordner das Glas enthält, das Sie verwenden möchten oder nicht. Sie können den Befehl mvn install im Commons-Projekt verwenden, um das JAR zu generieren. Außerdem müssen Sie in Ihrem Projekt, das Sie ausführen, ein Commons-Projekt hinzufügen.

+0

Ich habe es überprüft, und das Glas befindet sich im richtigen Ordner. – membersound

+0

hast du deine Commons-Bibliothek in das Projekt eingefügt, auf dem du gerade arbeitest? – ramzavil

+0

Ja natürlich. Siehe in meiner Frage 'My-Core'. – membersound

3

Sie müssen das Artefakt für Ihr Commons-Projekt über seine pom.xml erstellen.

wie in meinem Beispiel unten habe ich ein separates Projekt, bei dem ich die AWS verwenden und eine andere Abhängigkeit und dann endgültig Glas, die ich in anderem Projekt bin mit: -

Mein AWS-Client pom.xml Aussehen wie folgt: -

<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>com.kaamkaj</groupId> 
    <artifactId>aws-clients</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <packaging>jar</packaging> 

    <name>aws-clients</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <aws.sdk.version>1.11.104</aws.sdk.version> 
    </properties> 



    <dependencies> 
     <!--AWS dependency--> 
     <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dynamodb --> 
     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-dynamodb</artifactId> 
      <version>${aws.sdk.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.mercadopago</groupId> 
      <artifactId>sdk</artifactId> 
      <version>0.3.4</version> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>mercadopago</id> 
      <url>https://github.com/mercadopago/sdk-java/raw/master/releases</url> 
     </repository> 
    </repositories> 

</project> 

auch mvn clean install auf dem commons pom, in Ihrem Fall laufen.

Und dann in allen anderen Projekt, bei dem ich die aws-Client enthalten müssen, verwende ich das Artefakt-ID von oben Projekt wie folgt: -

<dependency> 
      <groupId>com.kaamkaj</groupId> 
      <artifactId>aws-clients</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 

Lassen Sie mich wissen, wenn Sie Fragen haben:

+0

Genau das habe ich gemacht ... – membersound

+0

@Membersound, sieht aus wie ' Glas' ist in Ihrem Pom vermisst. –

+0

Hinzugefügt, aber immer noch gleichen Fehler. – membersound

Verwandte Themen