2015-03-27 3 views
0

Я новичок в Maven и Java. Я пытаюсь запустить hdfs MapReduce на удаленном компьютере. У меня нет прав на запись/редактирование файла зависимостей. Мне было интересно, можно ли сделать мой проект Maven JAR и передать его на мою работу MapReduce. Таким образом, мне не нужно SSH на удаленную машину и изменять зависимости проектов maven. Я бы использовал JAR, который содержал все необходимые зависимости, которые не включены в удаленную машину для запуска моей работы MapReduce.Проект JAR Maven с зависимостями от удаленной машины без зависимостей

ответ

1

Вы можете сделать это с помощью maven assembly plugin.

Добавьте его в свою POM и настройте соответствующим образом (посмотрите на мой пример ниже).

Это создаст дополнительную банку, содержащую все зависимости, необходимые для запуска банки из командной строки, и отметит класс с помощью метода main(), который должен быть выполнен (по-другому, это может быть необязательно, поскольку вы может указывать основной класс при запуске java -jar).

Вот (часть) мои MainJooqClass:

package sunshine.web.shaker.main; 

// imports 

public class MainJooqClass { 

    public static void main(String[] args) { 

     // code 

    } 

} 

А вот часть моей POM, что настраивает плагин:

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

    <!-- ... --> 

    <build> 
     <plugins> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.4.1</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>sunshine.web.shaker.main.MainJooqClass</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 

    <dependencies /> 

</project> 
+0

ли я заменить 'полностью квалифицированное-main' с именем класса, который содержит главную? Я пошел, хотя документация, но у меня все еще есть проблемы – Liondancer

+0

@ Liondancer Да, вам нужно. Я улучшил этот пример в своем ответе. – watery

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