2009-07-27 14 views
3

私がしたいことは、すべての依存関係を持つアプリケーションのソースコード配布を作成してDVDに書き込むことです。 私は100年でそれを構築することができるように(だけでなく、[OK]を、あなたは...私は何を意味するか知っています)。ライブラリやMavenプラグインのオンライン依存関係はありません!自己維持可能なMavenビルドでソース配布を作成するには?

私はAntが、このために良いだろうことを知っているが、私は私のプロジェクトでMavenを使用しています。私はそれだけのためにAntに切り替えるつもりはない、私はmavenでこれを行う方法を尋ねている。または、自己維持型のAntビルドを生成する方法がある場合、私はDVDに入れることもできますが、これも素晴らしいでしょう。 (そこant:antプラグインですが、それだけでローカルのMavenリポジトリへの依存関係を指すのAntのbuild.xmlを生成)

私が撮影したアプローチは、私はDVDに入れた後、作成することができ、特別なローカルリポジトリを作成したいということですプロジェクトはmvn -o -Dmaven.repo.local=repo/on/dvdです。私はtruedependency:copy-dependenciesuseRepositoryLayoutのparamを設定して、このようなリポジトリを作成しようとしていました。しかし、それは、プラグインを含むように私は考えることができる唯一の方法は、コマンドラインでビルドの異なるローカルリポジトリを指定し、すべてを確実にするためである私のビルドが依存するMavenのプラグイン...

答えて

3

をひどく神経質にコピーされません。依存関係のソースなどをダウンロードし、プロジェクトの内容とカスタムリポジトリを含むアーカイブを作成します。

ソースとjavadocsをダウンロードするpomは、プロジェクトのターゲットディレクトリにダウンロードします(プロジェクトのターゲットディレクトリにダウンロードします。アーカイブの対象ディレクトリもローカルリポジトリに存在するため、アーカイブから除外します)。アセンブリ記述子は、プロジェクトのコンテンツとローカルリポジトリを単一の(かなり大きな)アーカイブにまとめます。あなたは本当にこれがすべてのビルドで実行されている必要はありませんので、

注処理は、すべてのプロファイルです。一時的なローカルリポジトリがターゲットディレクトリにある場合は、後でmvn cleanを使用して、簡単に混乱を取り除くことができます。プロファイルをアクティブにする は、次のような何かを:

mvn package -Parchive -Dmaven.repo.local=.\target\repo 

はここにポンポンです:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>name.seller.rich</groupId> 
    <artifactId>test-archive</artifactId> 
    <version>0.0.1</version> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.5</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <profiles> 
    <profile> 
     <id>archive</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>sources</id> 
       <phase>pre-package</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <classifier>sources</classifier> 
        <failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact> 
        <!--the target directory won't be included, but the sources will be in the repository--> 
        <outputDirectory>${project.build.directory}/sources</outputDirectory> 
       </configuration> 
       </execution> 
       <execution> 
       <id>javadocs</id> 
       <phase>pre-package</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <classifier>javadoc</classifier>      <failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact> 
        <outputDirectory>${project.build.directory}/javadocs</outputDirectory> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
      <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-4</version> 
      <executions> 
       <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptors> 
        <descriptor>src/main/assembly/archive.xml</descriptor> 
        </descriptors> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin>  
     </plugins> 
     </build> 
    </profile> 
    </profiles> 
</project> 

そして、ここではアセンブリです:

<assembly> 
    <id>archive</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
    <directory>${project.basedir}</directory> 
    <outputDirectory>/</outputDirectory> 
     <excludes> 
     <exclude>target/**</exclude> 
     </excludes> 
    </fileSet> 
    <fileSet> 
    <directory>${maven.repo.local}</directory> 
    <outputDirectory>repo</outputDirectory> 
    </fileSet> 
    </fileSets> 
</assembly> 
+0

+1興味深い答えです。私はしばらくそれを必要とするかもしれません... – KLE

0

私は完全な答えを持っていません。前回私が調べたところでは、ビルドの開始時(または別のものを使用)と実行中のmvn dependency:go-offlineでlocalRepositoryを駆除すると考えました。

あなたが本当に熱心であれば、あなたも分布にMavenの自身とJDKをバンドルしたいと思います。これにより、純粋なMavenビルドの範囲外になる可能性があります。

1

ウォッチこの:ホームページから Maven Assembly Plugin

引用:

あなたは 支持スクリプト、 コンフィギュレーションファイル、およびすべてのランタイムが含まれてMavenプロジェクトからバイナリ 分布を作成しますか 依存関係ですか?プロジェクトの ディストリビューションを作成するには、 Assembly Pluginを使用する必要があります。

十分に設定可能です。私は、埋め込まれた桟橋のサーバーとユーザーのドキュメントを使用して、Webアプリケーションの自己実行デモバージョンを作成するために特に使用しました。

関連する問題