ビルドおよびデプロイ プロセスの多くを自動化することを目標に、Maven リポジトリをセットアップしています。私の現在のワークフローは、サーバーを立ち上げ、git clone
を実行し、一連のmvn install
コマンドを実行して最上位のアプリケーションを完成させることから始まります。
私の理解では、Maven はアプリケーションをデプロイするためのツールではありません。現時点では、継続的インテグレーション、継続的デプロイ サーバー、または正式なプロセスの必要性は見られません。
ただし、これまでのところ、完全で実行可能なプログラムを Maven と一緒にまとめる正規の方法を見つけることができませんでした。
このスクリプトは、最上位の jar を取得し、それをローカルの Maven リポジトリにインストールします。
mvn -DgroupId=me.company -DartifactId=Top-Level-Application -Dversion=1.0-SNAPSHOT -DrepoUrl='http://theserver:8081/nexus/' dependency:get
すべてを手動でインストールした場合lib/
、Maven が行うべきように、このアプリケーションは依存するすべての jar をディレクトリ内で検出します。ただし、プルされたこのjarはデプロイできません-依存jarがローカルリポジトリにインストールされている間、クラスパスが期待する場所にコンパイルされません。
上記のスクリプトをリグしてpom.xml
、jar だけでなく をプルして実行mvn install
できれば、すべてがスムーズに進むと思います (奇妙なことに、ビルド プロセスの最後のステップが重複しているように見えますが)。もう 1 つのオプションは、依存するすべての jar を 1 つの巨大な jar にロールアップしてアプリケーションに含め、外部依存関係を持たないようにすることです。
これらの (または他の) オプションのうち、Maven ビルド プロセスを完了するための適切な方法はどれですか?
これは、関連性があると思われる限り絞り込んだ最上位の pom です。
<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>