2013-02-19 2 views
4

Я пытаюсь создать автоматическое решение для строительства с maven. Мое видение состоит в том, чтобы иметь сборку Maven, которая создает JAR-файл из моего проекта, а затем просто копирует все зависимости как JAR в какой-то подкаталог в папке «target».Как настроить сборку Maven для Java-проекта с внешними зависимостями?

Я не хочу использовать Shade или Assembly (поэтому я не хочу извлекать содержимое других JAR и включать его в один «супер-JAR», потому что проект более сложный, и он ломается, когда я включая все JAR в одном файле).

Как я могу сделать такую ​​сборку POM?

+0

Все зависимости копируются в целевой/LIB, когда вы делаете Maven сборки. –

+0

@ AjayGeorge, который очень сильно зависит от '' .. OP заявила, что он строит JAR, поэтому ничего не будет в его 'target/lib'. @Miroslav Мне любопытно, почему вы не хотите использовать плагин сборки? –

+0

@ AndersR.Bystrup Вы хотите создать один файл суперъяр? Это было бы лучше, но я продолжал бороться с перезаписанными/пропущенными файлами (так как на данный момент у проекта есть 68 внешних JAR, от которых это зависит) - даже Shade не помог ... поэтому я закончил с одним испорченным JAR-файлом, который не смог чтобы правильно начать ... как я сказал в своем комментарии ниже принятого ответа, я борюсь с конфигурацией Maven. –

ответ

7

Я не вижу здесь проблем. Просто создайте maven pom.xml с <packaging>jar</packaging> По умолчанию он не должен упаковывать в вашу jar все зависимые библиотеки.

<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

Нет проблем, я просто терпеть неудачу (надолго), чтобы получить контроль над Конфигурация Maven, и у меня нет времени, чтобы правильно ее изучить, из-за другой работы. :-(Спасибо, это в основном ответ. Теперь мне просто нужно выяснить, как добавить манифест в тот же шаг, но я думаю, что смогу справиться с этим. СПАСИБО! –

+2

Самый ценный совет для новичков Я могу посоветовать - попробуйте «mvn archetype: generate». Там вы можете получить готовые настройки maven для разных типов проектов. –

0

Вы можете использовать Maven-сборочный-плагин для создания ZIP-файла с выбора других файлов в каталоге. Я использовал этот метод для создания дистрибутивных zip-файлов для проекта. Есть несколько примеров, доступных в maven-assembly-plugin documentation.

+0

Благодарим вас за ответ, но это не так. Плагин сборки - последний шаг процесса, создающий дистрибутив. Но мне нужно было только сначала собрать зависимости в одном каталоге. –

2

Связанные с последним комментарием, использовать этот плагин, чтобы добавить основной класс в манифесте:

 <plugin> 
      <!-- Build an executable JAR --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>com.test.YourMainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
+2

Спасибо, я это уже понял. И, поскольку java -jar как-то переопределяет (?) Java -cp, я закончил использование java -cp "project-jarfile .jar; lib/* "mainClass в любом случае. –

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