2

ビルドおよびデプロイ プロセスの多くを自動化することを目標に、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>
4

1 に答える 1

0

間違っていたら訂正してください -- ソース コードをコンパイル済みの JAR に変換し、依存関係のクラスパスを適切に設定したいですか? それdependency:getはまったく目的ではありません。Maven JAR プラグインおよび/またはMaven AppAssemblerプラグインを調べる必要があります。

于 2012-12-12T23:38:48.467 に答える