2017-04-27 2 views
1

TL; DREclipse-Importabhängigkeiten, die in einem Maven Profil deklariert sind

Ich muss einige Abhängigkeiten in einem Maven Profil deklarieren und Eclipse ist nicht in der Lage, die Pakete zu lösen. Beispiel im Bild unten.

Ganzer Artikel

Hallo an alle: D

Im Moment bin ich in einer sehr fischig Projektsituation arbeiten. Ich entwickle eine Spring Web MVC-basierte Webanwendung und verwende Google AppEngine DevServer für die lokale Entwicklung, obwohl ich ernsthaft über die Migration von GAE aus offensichtlichen Gründen nachdenke.

Der Grund, warum das Projekt GAE basiert, ist, weil ich einfach den Job, den jemand anderes vor einiger Zeit begonnen hat, weiterführe.

Wie auch immer, während der Entwicklung und Erweiterung der App-Funktionalität kam die Zeit, in der die Peristen-Engine ein Bedürfnis wurde. Ich habe beschlossen, MongoDB zu implementieren und ja, mir ist bewusst, dass Sie keine andere Sache als Datastore in GAE-Umgebung verwenden können. Als Persistenz-Layer verwende ich MongoRepository. Bis jetzt ist alles in Ordnung.

Probleme kamen, als die Testzeit eintraf. Um Integrationstests zu implementieren, verwendete ich eine In-Memory-Datenbank, Fake Mongo Fongo zusätzlich zu NoSQLUnit für die Datenauffüllung.

Das Hauptproblem ist Fongo erfordert Mongo Java Treiber, um zu arbeiten, und ich kann es nicht erklären, noch eine andere JDBC Abhängigkeit, weil GAE DevServer wird nicht funktionieren. Ich verwende java-mongo-driver anyware nicht in meiner App, sondern indirekt über Fongo in Integrationstests.

Die Lösung ist einfach zu überspringen alle Test Source Compilation und deklarieren sie in einem separaten Maven, so dass ich jedes Mal, wenn ich auf dem lokalen Server bereitstellen möchte, alle Tests überspringen. Das ist kein Problem, da ich Jenkins für CI und SonarQube für Coverage (mit JaCoCo) verwende, so dass ich Tests dort einfach ausführen kann.

Im Moment habe ich meine pom.xml mit allen App Abhängigkeiten im allgemeinen Teil so kann ich mvn clean install -Dmaven.test.skip=true und dann habe ich ein <profile> erklärte wie folgt:

<profile> 
      <id>testing</id> 
      <dependencies> 
       <dependency> 
        <groupId>com.github.fakemongo</groupId> 
        <artifactId>fongo</artifactId> 
        <version>2.0.12</version> 
        <scope>test</scope> 
       </dependency> 
       <dependency> 
        <groupId>com.lordofthejars</groupId> 
        <artifactId>nosqlunit-mongodb</artifactId> 
        <version>0.7.7</version> 
        <scope>test</scope> 
       </dependency> 
       <dependency> 
        <groupId>org.mongodb</groupId> 
        <artifactId>mongo-java-driver</artifactId> 
        <version>3.4.2</version> 
       </dependency> 
      </dependencies> 
      <build> 

       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <version>2.20</version> 
         <configuration> 
          <junitArtifactName>junit:junit</junitArtifactName> 
          <encoding>UTF-8</encoding> 
          <inputEncoding>UTF-8</inputEncoding> 
          <outputEncoding>UTF-8</outputEncoding> 
         </configuration> 
        </plugin> 
       </plugins> 

      </build> 
     </profile> 

So kann ich mvn clean test -Ptesting, wenn Jenkins erkennt ein drücken.

Das Problem ist, ich kann Code in Eclipse nicht schreiben, weil es die Importe nicht löst, da sie in einem Profil deklariert sind. Z.B. Eclipse can't resolve dependencies declared in a Maven profile

Wie kann ich die Pakete, die ich in einem Maven-Profil deklariert habe, importieren und damit arbeiten?

Danke :)

P. S .: Ich so vielleicht jemand anderes, die ganze Geschichte zu erzählen entschieden, wer ist oder wird durch das gleiche Problem finden es gehen kann. Ich habe keine Lösung für Java-Mongo-Treiber und GAE gefunden, anstatt Profile zu definieren und Tests zu überspringen.

+0

Als Abhilfe können Sie versuchen, die fehlenden Abhängigkeiten manuell auf die Eclipse-Projekt Classpath Einstellungen hinzugefügt (zusätzlich zu dem, was sagt die pom). – Thilo

+0

Ich habe auch darüber nachgedacht, da es ein IDE-Problem ist. Was mich wirklich erstaunt, ist, dass ich keine Lösung finden kann, die googelt – Razvi

Antwort

1

Die Lösung gefunden.

Es stellt sich heraus, dass M2Eclipse mit aktiven Profilen arbeitet und sie standardmäßig nicht aktiv sind. Wenn Sie ein Profil deklarieren, wenn Sie damit arbeiten wollen und natürlich seine erklärten Abhängigkeiten in Eclipse, müssen Sie es aktivieren. Um Ihnen dies zu tun muss:

  1. Rechts auf Ihr Projekt Klicken Sie> Maven>Select Maven Profile ...

enter image description here 2. Wählen Sie einfach alle Profile Sie importieren in möchten Ihr Arbeitsbereich. (Aktivieren Sie diese Kontrollkästchen)

enter image description here 3. Der Job ist erledigt.

enter image description here

Verwandte Themen