2013-08-24 31 views
8

Jestem nowy w środowisku maven, potrzebuję pomocy. Dodano moim zewnętrznym pliku jar (directoryhelper.jar) w folderze lib jak poniżej w pom.xmljak dodać mój zewnętrzny plik jar do ścieżki klasowej

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

kompilacja zakończy się powodzeniem, ale w czasie wykonywania otrzymuję java.lang.NoClassDefFoundError.

sposób dodania kataloguhelper.jar do ścieżki klasy.

+0

Jak próbujesz uciekać? –

+0

po zbudowaniu z instalacją czystego mvn instaluję apk na telefon, a następnie próbuję uzyskać dostęp z przeglądarki. – prGD

+1

Okay, nikt nie powiedział nic o plikach APK :) A może tag? –

Odpowiedz

2

Maven po wyjęciu z pudełka wymyśli plik JAR (domyślne opakowanie). Ten plik JAR zawiera tylko (main) artefakty projektu. Jeśli weźmiesz to i uruchomisz, wyraźnie brakuje zależności - według projektu.

Zwykle artefakty Mavena są ponownie używane w połączeniu z ich POM, tak że w miejscu użycia wiadomo, jakie są zależności. Edycja: jeśli używasz plików APK i instalujesz je na telefonie, mogą istnieć mechanizmy radzenia sobie z zależnościami, odpowiadam na to tylko z punktu widzenia Mavena.

Jeśli chcesz utworzyć JAR z zależnościami musisz powiedzieć Maven, aby to zrobić, to nie jest domyślne. Sposoby mające Maven zrobić to (prawdopodobnie nie jest wyczerpująca):

  • Maven Assembly plugin, jar-with-dependencies predefiniowany Eurovoc:

    <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
        </configuration> 
    ... 
    
  • Maven Shade plugin

+0

Dziękuję za odpowiedź, napisałem prostą aplikację w Eclipse, importując i poznałem zależności słoików i dodałem te zależności do pom.xml, to rozwiązało mój problem. – prGD

3

ten sposób będzie ona utworzyć Pojedynczy słoik o dużych rozmiarach i czasie kompilacji będzie za duży przy każdej próbie budowania.

Zamiast tego wolę dodawać wszystkie słoiki do folderu lib i umieszczać je w ścieżce klas (manifest słoika), z tego powodu, gdy musimy dokonać pewnych zmian lub przenieść je do klienta lub do jakiegoś miejsca, możemy po prostu podać mały słoik (nie wszystkie zależności są scalone w słoiku)

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>com.kalindiinfotech.webcrawler.MainGUI</mainClass> 
          <!--       <mainClass>com.KalindiInfotech.busbookingmaven.form.LoginForm</mainClass>--> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/lib</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
+0

Aby to działało, musiałem dodać "-cp lib/*: fully.qualified.MainClassName.jar" do polecenia java, aby uruchomić słoik. –

Powiązane problemy