2013-08-24 46 views
8

Tôi mới làm quen với môi trường maven, cần một số trợ giúp. Thêm tập tin của tôi bên ngoài jar (directoryhelper.jar) trong thư mục lib như sau trong pom.xmlcách thêm tệp jar bên ngoài của tôi vào đường dẫn lớp

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

biên soạn thành công, nhưng trong thời gian chạy Tôi nhận java.lang.NoClassDefFoundError.

cách thêm thư mụchelper.jar vào đường dẫn lớp.

+0

Bạn đang cố gắng chạy như thế nào? –

+0

sau khi xây dựng với mvn sạch cài đặt, tôi cài đặt apk để điện thoại, sau đó cố gắng truy cập từ trình duyệt. – prGD

+1

Được rồi, không ai nói gì về APK :) Làm thế nào về một thẻ? –

Trả lời

2

Maven ra khỏi hộp sẽ xuất hiện tệp JAR (bao bì mặc định). Tệp JAR này chỉ chứa (main) hiện vật của dự án. Nếu bạn thực hiện điều đó và chạy nó, rõ ràng các phụ thuộc bị thiếu - theo thiết kế.

Thông thường các tạo phẩm Maven được tái sử dụng kết hợp với POM của chúng để tại thời điểm sử dụng, nó biết phụ thuộc là gì. Chỉnh sửa: nếu bạn đang sử dụng APK và cài đặt chúng trên điện thoại, có thể có các cơ chế để xử lý các phụ thuộc, tôi trả lời điều này chỉ từ quan điểm của Maven.

Nếu bạn muốn tạo JAR với phụ thuộc, bạn phải yêu cầu Maven làm như vậy, đó không phải là mặc định. cách của việc có Maven làm điều đó là (có thể không đầy đủ):

  • Maven Assembly plugin, jar-with-dependencies được xác định trước mô tả:

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

+0

Cảm ơn câu trả lời của bạn, tôi đã viết ứng dụng đơn giản trong nhật thực bằng cách nhập và đến để biết các phụ thuộc của jars và thêm những phụ thuộc đó vào pom.xml, nó giải quyết được vấn đề của tôi. – prGD

3

Bằng cách đó nó sẽ tạo ra một một lọ có kích thước lớn và thời gian xây dựng sẽ lớn mỗi khi bạn cố gắng xây dựng. Thay vào đó, tôi thích thêm tất cả các lọ vào một thư mục lib và bao gồm cả classpath (biểu hiện của jar), vì chúng ta phải thực hiện một số thay đổi hoặc triển khai lại cho khách hàng hoặc một số địa điểm. (không phải tất cả các phụ thuộc được hợp nhất trong jar)

  <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

Để có được điều này làm việc cho tôi, tôi đã bao gồm "-cp lib/*: fully.qualified.MainClassName.jar" vào lệnh java để chạy jar. –

Các vấn đề liên quan