Mavenに対応していないjarファイルをMavenのアーティファクトにする
Mavenに対応していない古いjarファイルをMavenのプロジェクトから参照したい場合、 この方法で古いjarファイルをMavenのアーティファクトにできる。
jarファイル名は、元のファイル名から${artifactId}-${version}.jar
、${artifactId}-${version}-sources.jar
、${artifactId}-${version}-javadoc.jar
に変換される。想定する使い方だと、ファイル名が変わらないようにartifactId
とversion
を設定する。
参考のために-sources.jar
と-javadoc.jar
を含めているが、無ければ省略可。
そもそも-sources.jar
があるのならソースを展開して普通のMavenプロジェクトにした方が良い。
compile
フェーズでjarからクラスファイルを取り出しているのは、マルチモジュール・プロジェクトの場合にmvn compile
やmvn 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>
packaging
をpom
にしないとビルドに失敗する。
アーティファクトとしてjarファイルをattachするだけなら、org.codehaus.mojo:build-helper-maven-plugin
のattach-artifact
ゴールでも同様のことができる。