Mavenに対応していないjarファイルをMavenのアーティファクトにする

Mavenに対応していない古いjarファイルをMavenのプロジェクトから参照したい場合、 この方法で古いjarファイルをMavenのアーティファクトにできる。

jarファイル名は、元のファイル名から${artifactId}-${version}.jar${artifactId}-${version}-sources.jar${artifactId}-${version}-javadoc.jarに変換される。想定する使い方だと、ファイル名が変わらないようにartifactIdversionを設定する。

参考のために-sources.jar-javadoc.jarを含めているが、無ければ省略可。 そもそも-sources.jarがあるのならソースを展開して普通のMavenプロジェクトにした方が良い。

compileフェーズでjarからクラスファイルを取り出しているのは、マルチモジュール・プロジェクトの場合にmvn compilemvn testでエラーが発生するため。

pom.xml
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.example</groupId>
  <artifactId>oldlib</artifactId>
  <version>1.5.1</version>
  <packaging>pom</packaging>
 
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <executions>
          <execution>
            <id>unpack-artifacts</id>
            <phase>compile</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <unjar src="src/jar/oldlib-1.5.1.jar" dest="${project.build.directory}/classes" />
              </target>
            </configuration>
          </execution>
          <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <attachartifact file="src/jar/oldlib-1.5.1.jar" type="jar" />
                <attachartifact file="src/jar/oldlib-1.5.1-sources.jar" type="java-source" classifier="sources" />
                <attachartifact file="src/jar/oldlib-1.5.1-javadoc.jar" type="javadoc" classifier="javadoc" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

packagingpomにしないとビルドに失敗する。

アーティファクトとしてjarファイルをattachするだけなら、org.codehaus.mojo:build-helper-maven-pluginattach-artifactゴールでも同様のことができる。