Maven a dodawanie własnych bibliotek

0

Witam

Stworzyłem sobie projekt w mavenie Java SE. Wszystko dobrze poszlo-importowałem do netbeans , jednak byłem zmuszony dodać dwie zewnętrzne biblioteki - jpr.jar i jgx.jar które mają w sobie pakiety pr i gx.
Poczytałem i poniżej zamieszczam swój pom.xml

 

<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>czytniki</groupId>
  <artifactId>DocReader</artifactId>
  <version>0.1</version>
  <packaging>jar</packaging>

  <name>DocReader</name>
  <a href="http://maven.apache.org">http://maven.apache.org</a>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <id>install pr</id>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <file>${basedir}/lib/jpr.jar</file>
                            <groupId>pr</groupId>
                            <artifactId>pr</artifactId>
                            <version>0.99</version>
                            <packaging>jar</packaging>
                        </configuration>
                    </execution>
                </executions>          
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <id>install gx</id>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <file>${basedir}/lib/jgx.jar</file>
                            <groupId>gx</groupId>
                            <artifactId>gx</artifactId>
                            <version>0.99</version>
                            <packaging>jar</packaging>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

</plugins>
</build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>[4, )</version>
            <scope>test</scope>
           
        </dependency>
        
        <dependency>
            <groupId>pr</groupId>
            <artifactId>pr</artifactId>
            <version>0.99</version>
        </dependency>


            <dependency>
            <groupId>gx</groupId>
            <artifactId>gx</artifactId>
            <version>0.99</version>
        </dependency>
    </dependencies>
</project>

Problem jest taki że w netbeans mogę dodać pakiety gx i pr i korzystac z ich metod-nawet build przechodzi pozytywnie jednak po przebudowaniu w target mam mojego jara aplikacji jednak nigdzie nie widzę tych jarów jpr.jar i jgx.jar-po uruchomieniu się wywala przy wywołaniu metod z tych dwóch pakietów i tyle.

Czy sposób jaki znalazłem dodawania bibliotek jest poprawny, czy nie można tego jakoś dodac w samym IDE tylko klepac kod w pomie?

Dziękuje i pozdrawiam

EDIT: Buduje przez mvn clean package

0

masz dwa jary jpr.jar i jgx.jar. Wchodzisz do konsoli i:

$ mvn install:install-file -Dfile=jpr.jar -DgroupId=jpr -DartifactId=jpr -Dversion=1 -Dpackaging=jar
$ mvn install:install-file -Dfile=jgx.jar -DgroupId=jgx -DartifactId=jgx -Dversion=1 -Dpackaging=jar

Instalujesz je w lokalnym repo i dalej już z górki.

0

Dzięki Koziołek za feedback(ostatnio przypadło mi to słowo do gustu :P ) ale to nie rozwiązało moich problemów...przeniosłem sobie lokalne repo mvn do głównego katalogu...dodałem te dwa jary poleceniami, które mi dałeś i widże ze dodały się do lokalnego repo.

Dałem sobie ładnie w pomie :

 </dependency>
    
    <dependency>
        <groupId>pr</groupId>
        <artifactId>pr</artifactId>
        <version>1.0</version>
    </dependency>


        <dependency>
        <groupId>gx</groupId>
        <artifactId>gx</artifactId>
        <version>1.0</version>
    </dependency>

</dependencies>

Ale gdy robię import gx.; i pr.; to nie umie znaleźc pakietów.

Dodawałem tak wiec powinny być widoczne - co robię źle? W moim poprzednim rozwiązaniu przynajmniej widział pakiety ale tych jarów nie dodawał do targeta :/.

mvn install:install-file -Dfile=jgx.jar -DgroupId=pr -DartifactId=pr -Dversion=1.0 -Dpackaging=jar

EDIT: W ogóle to teraz jest max zje... W projekcie dodaje import pr.; import gx.; i mam podkreslone w IDE ze nie widzi tych pakietów ale jak odpale clean install to się buduje ale oczywiście w target mam tylko jara mojej aplikacji i ani śladu tych dwóch dodanych bibliotek. Jakieś sugestie?

0

Wydaje mi się, że będziesz potrzebował skonfigurować goal copy-dependencies

http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html

Druga sprawa to classpath. Musisz dodać te jary do classpath poprzez java -jar jarGlowny -classpath jarGlowny.jar:lib/innyJar.jar.
Ewentualnie możesz skonfigurować manifest jara i tam dodać dodatkowe jary do classpath.

0

hmm...problem z "widocznością" pakietów okazał się po stronie netbeans (on dalej chciał szukać w domyslnym katalogu lokalnego repo). Po nie małych utarczkach przekonałem go do nowej lokacji...ok mam-w ide pakiety są widoczne (chociaż i tak musiałem z linii poleceń dodawać te jary bo add manually nie generował automaytycznie poma dla jara:/ - to normalne?).

Zastosowałem rade z kopiowaniem zalezności i dodałem do głównego poma:

  <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>./target/lib</outputDirectory>
                        <excludeTransitive>true</excludeTransitive>
                    </configuration>
                </execution>
            </executions>
        </plugin>

i mam te jary w katalogu lib w targecie.

Ale nie mam pojęcia jak zmienić manifesta za pomoća poma (lub wyklikać to w netbeans). Przecież nie będe za każdym razem wchodził w jara i zmieniał mu manifest.
Jakieś rady jak dodać dwa jary do classpath w manifeście za pomocą poma?

EDIT : o znalazłem...zaraz bede miał rozwiązanie i pewnie...dodatkowe pytania:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1