webentwicklung-frage-antwort-db.com.de

Maven und Eclipse: eine zuverlässige Möglichkeit, einem Projekt Nicht-Maven-Gläser oder externe Gläser hinzuzufügen?

Maven ist großartig. Es hält mich meistens von der Abhängigkeits-Hölle fern, indem es Versionen von abhängigen Paketen in der pom -Konfiguration angibt und diese automatisch anwendet. Es ist auch hervorragend in Eclipse über m2e integrierbar, sodass die Dinge in einer IDE nahtlos funktionieren.

Dies alles ist ideal für Abhängigkeiten, die Maven weltweit bekannt sind. Manchmal gibt es jedoch Bibliotheken, die in ein Projekt aufgenommen werden müssen, das in den Maven-Repos nicht verfügbar ist. In diesem Fall füge ich sie normalerweise einem lib/ - Verzeichnis in meinem Projekt hinzu. Solange sie im Klassenpfad sind, kompilieren sich die Dinge.

Das Problem besteht jedoch darin, dass sie beim Importieren eines Projekts automatisch einbezogen werden. Ich habe dieses Problem mit halbgebackenen Fixes und Hacks viel zu lange toleriert. Jedes Mal, wenn jemand dieses Projekt installiert, muss er die Jars in lib/ Manuell zu seinem Eclipse-Erstellungspfad hinzufügen, damit alle Fehler verschwinden. So etwas wie das folgende:

enter image description here

Ich suche nach einer Möglichkeit, diesen Prozess auf eine Weise zu automatisieren, die sowohl mit dem Befehlszeilenprogramm mvn als auch mit Eclipse funktioniert: Eclipse steht im Vordergrund, da Projekte nur kompiliert werden können, wenn Sie sie importieren .

Ich möchte hierfür keinen Reposerver einrichten, und ich habe auch keine firmeneigenen Komponenten, die eine Einrichtung vor Ort rechtfertigen würden. Ich habe nur einige JAR-Dateien, in denen die Entwickler Maven nicht verwenden. und ich möchte mit ihnen kompilieren ... Ich sollte sie nur in die Verteilung meiner Software einbeziehen können, oder?

Ich bin wirklich auf der Suche nach einem vernünftigen Weg, dies umzusetzen, der auch in Eclipse problemlos funktioniert. Dies ist eine Lösung Ich habe vielversprechende gefunden, aber es scheint definitiv keine maßgebliche Lösung für dieses Problem zu geben. Das einzige andere, was nahe kommt, ist das maven-addjars-plugin , das funktioniert, aber nur auf der Kommandozeile. Dieses Plugin ist nicht schlecht und hat eine ziemlich vernünftige Konfiguration:

<plugin>
    <groupId>com.googlecode.addjars-maven-plugin</groupId>
    <artifactId>addjars-maven-plugin</artifactId>
    <version>1.0.5</version>
    <executions>
        <execution>
            <goals>
                <goal>add-jars</goal>
            </goals>
            <configuration>
                <resources>
                    <resource>
                        <directory>${project.basedir}/lib/Java-aws-mturk</directory>
                    </resource>
                    <resource>
                        <directory>${project.basedir}/lib/not-in-maven</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

Wenn Sie jedoch versuchen, es in Eclipse zum Laufen zu bringen, müssen Sie Ihrem pom.xml Das folgende Durcheinander in Bezug auf die Lebenszykluszuordnung hinzufügen, das ich noch nie angewendet habe. Ich glaube nicht einmal, dass es so konfiguriert ist, dass es dem Eclipse-Erstellungspfad tatsächlich etwas hinzufügt.

<pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
            <groupId>org.Eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>
                                    com.googlecode.addjars-maven-plugin
                                </groupId>
                                <artifactId>
                                    addjars-maven-plugin
                                </artifactId>
                                <versionRange>
                                    [1.0.5,)
                                </versionRange>
                                <goals>
                                    <goal>add-jars</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>
30
Andrew Mao

1) Sie können die Systembereichsabhängigkeit verwenden

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/x.jar</systemPath>
    </dependency>

2) Du kannst dein x.jar in das lokale Maven Repository als kopieren

repository/test/x/1.0/x-1.0.jar

und füge eine Abhängigkeit hinzu als

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
    </dependency>
61

Sie können maven verwenden, um Dateien aus dem Ordner project\lib mit dem folgenden Maven-Installations-Plugin auf dem lokalen Repository zu installieren. Ich habe das schon mit JDBC-Treibern gemacht. Möglicherweise müssen Sie ein separates pom dafür erstellen und es mit mvn -f installdeps.pom oder so ausführen.

Wenn Sie es dazu bringen können, Nice zu spielen und sich an einen Lebenszyklus wie validate oder so zu binden, können Sie das m2e-Plugin mit Eclipse verwenden, und es könnte Nice spielen und Abhängigkeiten direkt aus der pom.xml lesen und die Jars nach Bedarf auf dem installieren lokales Repo.

    <plugin>
        <!-- We dont want children attempting to install these jars to the repo. -->
        <inherited>false</inherited>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
            <execution>
                <id>Microsoft JDBC Driver File 1</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/sqljdbc4.jar</file>
                    <groupId>com.Microsoft</groupId>
                    <artifactId>Microsoft-jdbc-driver</artifactId>
                    <version>4.0</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
            <execution>
                <id>ojdbc5</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/ojdbc5.jar</file>
                    <groupId>com.Oracle</groupId>
                    <artifactId>ojdbc5</artifactId>
                    <version>11.1.2</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
        </executions>
    </plugin>
6
Javanator

Es scheint mir, dass Sie das Maven Resources Plugin verwenden könnten, um dies für Sie zu tun. Binden Sie einfach das Kopieren von Ressourcen an eine entsprechende Lebenszyklusphase (eine Phase vor dem Kompilieren). Sie müssen höchstwahrscheinlich das Maven-Compiler-Plugin optimieren, damit sich diese Bibliotheken beim Kompilieren und zur Laufzeit im Klassenpfad befinden.

0
Muel