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

MavenでWindows(x86 or x86_64)によってプロファイルを切り替える

具体的には、GUISWTを使っている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