MavenでWindows(x86 or x86_64)によってプロファイルを切り替える
具体的には、GUIにSWTを使っているJavaのデスクトップアプリケーションで、プラッtフォームによってSWTのjarを変更したいというシチュエーションです。SWTのjarファイルには、それぞれのプラットフォーム用のDLL(Windowsの場合)が含まれているので、x86 or x64にってjarを切り替えないと動かない。ただし、ここでのプラットフォームは、OS自体ではなくて使用するJVMになります。64bitのWindowsでもJVMが32bitだとx86になります。
profilesを以下のように定義して、osのfamilyとarchで切り替える。
<profiles> <profile> <id>windows_x86</id> <activation> <os> <family>Windows</family> <arch>x86</arch> </os> <!-- archのかわりに以下でもよい。 <property> <name>sun.arch.data.model</name> <value>32</value> </property> --> </activation> <dependencies> <dependency> <groupId>swt</groupId> <artifactId>swt-win32_x86</artifactId> <version>3.6.1</version> <type>jar</type> </dependency> </dependencies> </profile> <profile> <id>windows_x86_64</id> <activation> <os> <family>Windows</family> <arch>amd64</arch> </os> </activation> <dependencies> <dependency> <groupId>swt</groupId> <artifactId>swt-win32_x86_64</artifactId> <version>3.6.1</version> <type>jar</type> </dependency> </dependencies> </profile> </profiles>
OSの情報はmvn -vで確認できます。
C:\>mvn -v Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900) Java version: 1.6.0_24 Java home: C:\Program Files\Java\jdk1.6.0_24\jre Default locale: ja_JP, platform encoding: MS932 OS name: "windows server 2008 r2" version: "6.1" arch: "amd64" Family: "windows"
実際にプロファイルが有効になっているか確認。pom.xmlのdependencyに反映されているかは、"mvn help:effective-pom"で確認します。
c:\>mvn help:active-profiles The following profiles are active: - windows_x86 (source: pom)
また、本題ではありませんが、最新のSWTのjarのアップロードされているMavenリポジトリがあるのかわからなかったので、pom.xmlに記述したdependencyに合わせてローカルのリポジトリにディプロイしています。手順としては、Eclipse Projectから、必要なバイナリをダウンロードしてきて、それに含まれているjarファイルを"mvn:deploy-file"でディプロイしています。
SET REPO_URL=dav:http://www.example.com/maven mvn deploy:deploy-file -DrepositoryId=jus.co.jp -Durl=%REPO_URL% -Dfile=swt-3.6.1-win32-win32-x86.jar -DgroupId=swt -DartifactId=swt-win32-x86 -Dversion=3.6.1 -Dpackaging=jar mvn deploy:deploy-file -DrepositoryId=jus.co.jp -Durl=%REPO_URL% -Dfile=swt-3.6.1-win32-win32-x86_64.jar -DgroupId=swt -DartifactId=swt-win32-x86_64 -Dversion=3.6.1 -Dpackaging=jar