2013-08-24 2 views
8

Я новичок в среде maven, вам нужны некоторые из них. Добавлен мой внешний банку файл (directoryhelper.jar) в Lib папки, как показано ниже в pom.xmlкак добавить мой внешний файл jar в путь класса

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

компиляция прошла успешно, но во время выполнения я получаю java.lang.NoClassDefFoundError.

Как добавить directoryhelper.jar в путь класса.

+0

Как вы пытаетесь запустить? –

+0

после сборки с mvn clean install, я устанавливаю apk на телефон, а затем пытаюсь получить доступ из браузера. – prGD

+1

Хорошо, никто ничего не сказал о APKs :) Как насчет тега? –

ответ

2

У Maven из коробки появится файл JAR (упаковка по умолчанию). Этот JAR-файл содержит только артефакты проекта (main). Если вы возьмете именно это и запустите его, ясно, что зависимости отсутствуют - по дизайну.

Обычно артефакты Maven повторно используются в сочетании с их POM, так что в точке использования он знает, что такое зависимости. Изменить: если вы используете APK и устанавливаете их на телефоне, могут быть механизмы для работы с зависимостями, я отвечаю на это просто с точки зрения Maven.

Если вы хотите создать JAR с зависимостями, вы должны сообщить Maven, чтобы сделать это, это не по умолчанию. Пути, имеющие Maven сделать это (вероятно, не является исчерпывающим):

  • Maven Assembly plugin, jar-with-dependencies предопределенный дескриптор:

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

+0

Спасибо за ваш ответ, я написал простое приложение в eclipse, импортировав и узнав зависимости jars и добавил эти зависимости к pom.xml, он решил мою проблему. – prGD

3

Таким образом, это будет создать однобарабан большого размера и времени сборки будут огромны каждый раз, когда вы пытаетесь построить.

Я предпочитаю добавлять все банки в папку lib и включать в путь к классам (манифест 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

Чтобы заставить это работать для меня, я должен был включить «-cp lib/*: full.qualified.MainClassName.jar» в java-команду для запуска jar. –

Смежные вопросы