2012-12-12 2 views
2

Я создаю репозиторий Maven с целью автоматизации большей части моего процесса сборки и развертывания. Мой текущий рабочий процесс начинается с воспитания сервера, выполнения git clone и выполнения команды mvn install для завершения приложения верхнего уровня.Обычный рабочий процесс для создания разворачиваемого кода maven из repo

Насколько я понимаю, Maven не является инструментом для развертывания приложений, и на данный момент я не вижу необходимости в непрерывном сервере интеграции или непрерывного развертывания или в формальном процессе.

Однако до сих пор я не смог найти канонический способ собрать всю запущенную программу вместе с Maven.

Этот скрипт заходит так далеко, чтобы получить верхнюю банку уровня и установить его в локальную Maven репо:

mvn -DgroupId=me.company -DartifactId=Top-Level-Application -Dversion=1.0-SNAPSHOT -DrepoUrl='http://theserver:8081/nexus/' dependency:get 

Если я установил все вручную, это приложение будет найти все зависимые банки в lib/ как Maven должен делать. Однако этот кувшин, как вытащенный, не разворачивается - в то время как зависимые банки устанавливаются на локальное репо, они не компилируются, где ожидает путь класса.

Я полагаю, если бы я мог подстроить выше сценарий тянуть pom.xml, а не только банку и запустить mvn install на том, что все будет идти гладко (хотя странно, что, кажется, дублирует последний шаг процесса сборки). Другой вариант заключается в том, что приложения содержат все зависимые банки, свернутые в одну гигантскую банку и не имеющие внешних зависимостей.

Какой из этих (или других) вариантов является правильным способом завершения процесса сборки Maven?

Вот наш топ-уровня ПОМ сужен до столько, сколько я могу думать, было бы уместным:

<project> 
<modelVersion>4.0.0</modelVersion> 
<groupId>me.company</groupId> 
<artifactId>Top-Level-Application</artifactId> 
<packaging>jar</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>Top Level Application</name> 
<url>http://company.me</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://host:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>Internal Snapshots</name> 
     <url>http://host:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <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>me.company.application.MainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory> 
          ${project.build.directory}/lib 
         </outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>me.company</groupId> 
     <artifactId>First-Library</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    <!-- more in-house libraries --> 
    <!-- third party libraries - Apache Commons, javamail, etc. --> 
</dependencies> 
</project> 
+1

Описывая структуру вашего приложения, его упаковку и целевую среду развертывания, поможет вам помочь. – Perception

+0

@Перцепция включена pom – djechlin

ответ

0

Поправьте меня, если я неправ - вы хотите, чтобы преобразовать исходный код в скомпилированный JAR, с соответствующим набором классов для его зависимостей? Это не то, что для dependency:get. Вы должны изучить Maven JAR plugin и/или плагин Maven AppAssembler.

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