Я создаю репозиторий 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>
Описывая структуру вашего приложения, его упаковку и целевую среду развертывания, поможет вам помочь. – Perception
@Перцепция включена pom – djechlin