読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

Mavenで社内リポジトリを経由せずに直接Jarを指定せざるを得ないとき

Maven Internal Repository

普段、自分たちが構築した共通ライブラリ(jar)はMavenの社内リポジトリ(internal repository)に格納しています。
Jenkinsでナイトリービルドして、生成されたJarを、そのままJenkinsが社内リポジトリにアップするので、ほとんど人手もかからず、かなり重宝しています(^^)

そんな便利なMavenの社内リポジトリですが、状況によっては、アクセスできない人が関わる…なんてケースもあるかと思います(^^;

実際、そうなったのですが…。

どんなケースだよ!って感じですが、簡単に書くと

  • 社外の人へ、実装の参考情報としてソースコードを渡す
  • 実際動かしたりコード触るけど、あくまで参考なのでリポジトリ作る手間とかは省きたい

みたいな状況…(^^;すみません、よくわからないですね。
まあ要はタイトルの通りな状況があった場合の話です。

やり方は色々あるのかもしれませんが、以下サイトの(2)を参考にさせて頂きました。

Mavenプロジェクトで3rdパーティJARを扱う方法

pom.xml

<dependency>
    <groupId>jp.co.hoge</groupId>
    <artifactId>XXX</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/../lib/XXX-1.0.0.jar</systemPath>
</dependency>

とか書いて、私の場合はNetBeansのプロジェクトフォルダをデフォルトのままにしているので
C:\Users\myname\Documents\NetBeansProjects\lib
に必要なjarを入れ込みます。

で、上記サイトのコメント欄にあるように、このままだとwarとして固めたときにWEB-INF/libへコピーされず起動できないので、maven-dependency-pluginのexecutionで以下加えました。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>compile</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
                <includeArtifactIds>XXX,YYY</includeArtifactIds>
            </configuration>
        </execution>
    </executions>
<plugin>

これでビルド時にWEB-INF/lib配下へコピーされて、warとして動かすことができました。

完全にMavenのメリットを殺してるようなやり方なので、冒頭に書いたような特殊なシチュエーション以外で使うことはないし、使わないことをお勧めしますが、自分メモのために書きました(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村