Maven i eclipse: niezawodny sposób na dodanie Nie-Mavena lub zewnętrznych słoików do projektu?

Maven jest świetny. To głównie trzyma mnie z dala od piekła zależności jar przez podanie wersji pakietów zależnych w Konfiguracji pom i stosuje je automatycznie. Posiada również świetną integrację z Eclipse poprzez M2E, dzięki czemu wszystko działa bezproblemowo w IDE.

To wszystko jest Świetne dla zależności, które są znane mavenowi na całym świecie. Jednak czasami istnieją biblioteki, które muszą być zawarte w projekcie, który nie jest dostępny w repozytorium Maven. W tym przypadku zazwyczaj dodaję je do lib/ katalogu w moim projekcie. Tak długo, jak są one w classpath następnie rzeczy kompilować.

Jednak problem polega na tym, aby były one dołączane automatycznie podczas importowania projektu. Zbyt długo tolerowałem ten problem z na wpół upieczonymi poprawkami i hackami. Za każdym razem, gdy ktoś instaluje ten projekt, muszę mu powiedzieć, aby ręcznie dodał jars w lib/ do ich Eclipse build path tak, że wszystkie błędy znikają. Coś jak po:

Tutaj wpisz opis obrazka

Szukam sposobu, aby zautomatyzować ten proces w sposób, który działa zarówno z mvn program wiersza poleceń i Eclipse: bardziej nacisk na Eclipse, ponieważ miło jest mieć projekty, które tylko kompilują się podczas importowania ich.

Nie chcę w tym celu konfigurować serwera repo, ani nie mam żadnych własnych komponentów, które uzasadniałyby konfigurację czegokolwiek lokalnie. Mam tylko pliki jar, gdzie deweloperzy nie używają Mavena; i Chcę się z nimi skompilować...Powinienem być w stanie włączyć je do dystrybucji mojego oprogramowania, prawda?

Naprawdę Szukam rozsądnego sposobu, aby to zaimplementować, który będzie działał również w Eclipse bez zamieszania. jest to jedno rozwiązanie znalazłem obiecujące, ale zdecydowanie nie wydaje się być autorytatywne rozwiązanie tego problemu. Jedyną inną rzeczą, która się zbliża, jest wtyczka maven-addjars-plugin , która działa dobrze, ale tylko na linii poleceń. Ta wtyczka nie jest zła i ma całkiem rozsądną konfigurację:

<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>

Jednak próba uruchomienia go w Eclipse polega na dodaniu następującego bałaganu o mapowaniu cyklu życia do twojego pom.xml, co nigdy nie zadziałało; nawet nie sądzę, że jest skonfigurowane tak, aby dodawać cokolwiek do ścieżki budowania Eclipse.

<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>
Author: Andrew Mao, 2013-03-09

3 answers

1) możesz użyć zależności zakresu systemu

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

2) możesz skopiować swój x.jar do lokalnego repozytorium maven jako

Repozytorium / test/x/1.0 / x-1.0.jar

I dodać zależność jako

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
    </dependency>
 50
Author: Evgeniy Dorofeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-10 06:13:46

Możesz użyć Mavena do instalacji plików z folderu project \ lib do lokalnego repo za pomocą maven-install-plugin jak poniżej. Robiłem to wcześniej ze sterownikami JDBC. Być może będziesz musiał utworzyć dla niego oddzielny pom i wykonać go za pomocą mvn - f installdeps.pom czy coś w tym stylu.

Jeśli uda Ci się sprawić, aby grała ładnie i wiązała się z cyklem życia, takim jak validate czy coś takiego, to możesz użyć wtyczki M2E z Eclipse i może po prostu grać ładnie i czytać zależności prosto z pom.xml i zainstalować jars w razie potrzeby do lokalnego 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>
 5
Author: Javanator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 01:24:13

Wydaje mi się, że możesz użyć Maven Resources plugin, aby zrobić to za Ciebie. Wystarczy powiązać kopiowanie zasobów z odpowiednią fazą cyklu życia (fazą poprzedzającą kompilację). Najprawdopodobniej będziesz musiał dostosować maven-compiler-plugin tak, że te biblioteki są na classpath podczas kompilacji i podczas wykonywania.

 0
Author: Muel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 01:12:52