Sonntag, Juni 7, 2020

In einem multi-Modul-Projekt, kann ein maven-Modul Zugriff transitive test-scoped Abhängigkeit von einem anderen Modul abhängig?

Ich habe ein multi-Modul-Maven – +Spring-Projekt. Einige Module sind von anderen abhängig-Module.

Sagen wir, wir haben ein Modul mit dem Namen services das hängt davon ab, das Modul namens persistence.

Dem services-Modul :

  • Im Frühjahr Ebene, importiert die persistence Kontext
  • Bei Maven-Ebene, hängt von der persistence Modul

Den persistence Modul definiert einige configuratrion im Zusammenhang mit der… persistence : datasource, JPA, transactions…

Es hat einige Abhängigkeiten für die Prüfung der DB (JDBC-Treiber, DBCP, H2), die begrenzt sind, um die test-Umfang, seit Wann die app bereitgestellt wird, wird die DataSource wird definiert in den container (Tomcat) und Zugriff über JNDI.

Nun, ich möchte Zugriff haben, während die Maven-test-phase des services – Modul, um die test-scoped (transitive) Abhängigkeiten der persistence Modul.

Den Maven-Handbuch (Tabelle 3.1) sagen, dass normalerweise, test-scope-Abhängigkeiten nicht verfügbar sind transitiv.

Ist es möglich, Sie zu bekommen irgendwie in den Kontext eines multi-Modul-Projekt ?

Wenn nicht, was sind gute alternativen ? (Definieren Sie die test-Abhängigkeiten in das übergeordnete pom ?… )

InformationsquelleAutor Pierre Henry | 2013-04-04

2 Kommentare

  1. 23

    Fand ich genau, wie es funktionieren sollte, d.h. durch die generieren Sie ein test-JAR –, das ist eine Art von Artefakt, in das Modul, das verwendet wird, als eine Abhängigkeit von den anderen, in unserem Beispiel ist die Persistenz-Modul :

    <build>
        <plugins>
    
                <!-- Generate test jar too -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>test-jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
        </plugins>
    </build>

    Dann durch Erklärung jar-test als test-scoped Abhängigkeit von dem anderen Modul, in unserem Beispiel die services Modul :

    <!-- Services module -->
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>services</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>services</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

    Hinweis: die zweite Abhängigkeit, die ist identisch mit der ersten, außer für die type zum test-jar und für die scope, das set zu testen.

    Nun, Sie würde sich vorstellen, dass die tests geschrieben in der service Modul müsste man Zugriff auf die test-Klassen des persistence Modul (dies funktioniert), sondern auch auf die test-scoped Abhängigkeit von der Persistenz-Modul.

    Allerdings ist es ein bekanntes Problem ( https://issues.apache.org/jira/browse/MNG-1378 ), dass es nicht so funktioniert. Es ist seit 2005, also ich sehe es nicht fest in einer nahen Zukunft… aber wer weiß.

    Si ich nur duplizieren Sie die test-scoped Abhängigkeiten auf beide Module, oder legen Sie Sie in das übergeordnete pom…

    • Vielen Dank für diese, gerade für eine Stunde gefragt, warum ich war immer Klasse nicht gefunden Ausnahme 🙁
    • DANKE!!!! Für was es Wert ist, ich habe nicht brauchen, um die Abhängigkeit für das main-Modul Artefakt, nur die <scope>test</scope> ein, aber auch andere Leute, die Laufleistung kann variieren, natürlich. 🙂
  2. 1

    Ist sollte aber es funktioniert nicht. Es geschieht mit den bereitgestellten Umfang zu. Problem hier angemeldet: https://issues.apache.org/jira/browse/MNG-5255

    • Danke aber das Problem, das Sie spitz zu, während Verwandte, keine Antwort auf meine Frage. Eigentlich ist es fast das entgegengesetzte problem, Sie haben es : transitive Abhängigkeiten von test – /bereitgestellt Abhängigkeiten enthalten sind in der letzten GLAS.
    • Sorry! tl;dr 🙂 Wir liefen in die test-Umfang transitive Abhängigkeiten nicht in die unit-test-classpath nur den anderen Tag so, wenn ich sah Ihre Frage, ich nahm an, es war das gleiche Problem.
    • Ist einigen anderen Modul deklarieren diese als nicht-test-scope-Abhängigkeiten? Holen Sie sich die effektive POM (über eclipse oder Hilfe-plugin) zu sehen.

Kostenlose Online-Tests