2011-12-19 3 views
1

Я хочу использовать Maven для создания двух отдельных банок для моего проекта.Два отдельных JAR с Maven

Один из них будет включать все под пакетом **/client и один, который будет содержать все под пакетом **/server. Клиентский пакет также должен содержать источники.

Вопрос 1: Как я могу настроить мой pom для производства этих двух отдельных банок?

Вопрос 2: Возможно ли создать обе команды с одной командой maven?

Любая помощь приветствуется.

спасибо!

ответ

-1

После нескольких часов поиска, исследования, удара головой о стол, кровотечения и плача, я решил это, используя монтажный плагин Maven.

Вот как это происходит:

Я создал два отдельных сборочных дескрипторы. Во-первых, ${basedir}/src/main/assembly/client.xml (src/main/assembly, по-видимому стандартное место для сборки Maven дескрипторы)

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>client</id> 

    <formats> 
     <format>jar</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}/classes</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/client/**</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.basedir}/src/main/java</directory> 
      <outputDirectory>/</outputDirectory> 
      <useDefaultExcludes>false</useDefaultExcludes> 
      <includes> 
       <include>**/client/**</include> 
      </includes> 
     </fileSet> 
    </fileSets> 

</assembly> 

затем ${basedir}/src/main/assembly/server.xml

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>server</id> 

    <formats> 
     <format>jar</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}/classes</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/server/**</include> 
      </includes> 
     </fileSet> 
    </fileSets> 

</assembly> 

и добавил следующее к моему pom.xml:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2.2</version> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/client.xml</descriptor> 
        <descriptor>src/main/assembly/server.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

пробег mvn package .. .aaand voila !!! Одна команда ... две JAR! ... настолько легкие, что я хочу плакать все время, которое я потратил, пытаясь найти решение.

[INFO] --- maven-assembly-plugin:2.2.2:single (default) @ [my project] --- 
[INFO] Reading assembly descriptor: src/main/assembly/client.xml 
[INFO] Reading assembly descriptor: src/main/assembly/server.xml 
[INFO] Building jar: [my project]-1.0-SNAPSHOT-client.jar 
[INFO] Building jar: [my project]-1.0-SNAPSHOT-server.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 8.202s 
[INFO] Finished at: Mon Dec 19 23:43:52 EET 2011 
[INFO] Final Memory: 26M/245M 
[INFO] ------------------------------------------------------------------------ 
+1

Это неправильный путь. Как описано выше, отделите клиента и сервер на два отдельных модуля ... вот как работать с Maven. – khmarbaise

+1

Разделение проекта на два отдельных модуля НЕ является вариантом в моем проекте, так как мне нужно упаковывать файлы, которые обычно будут исключаться при обычном запуске пакета mvn. Это именно то, для чего предназначен плагин сборки. Прочитайте об этом и изучите его перед тем, как спустить ... – Pete

+0

Несмотря на хороший комментарий, который вы дали. Какие файлы не включены в пакет? – khmarbaise

8

Мой совет должен был бы реорганизовать проекты в отдельный клиента и отдельный проект сервер соответственно. Добавив проект multi mudule (прокрутка вниз), содержащий оба проекта, можно создать клиент и сервер в одной команде.

+2

Это путь. Если у вас есть кросс-зависимости между клиентским и серверным модулями, реорганизуйте их в третий «общий» модуль, используемый обоими. – tdrury

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