maven / / 2023. 11. 7. 07:42

maven에서 os별 다른 dependency 추가하기

썸네일 변환 작업을 하다가 skija 라는 라이브러리를 사용하게 되었다. 이 라이브러리는 os별로 사용하는 라이브러리가 다르다. 그래서 os에 맞는 dependency를 걸어줘야 한다. skija는 skia를 java로 바인딩을 해주는 역할을 하는데 내부적으로 os에 따른 최적화 작업이 다르다.

Skija dependency

지금 사용하려는 platform도 위의 4가지를 모두 사용해야 하는 상황이다. 그래서 maven에서 할 수 있는 방법을 찾아보니 아래와 같이 사용하면 profileosarch에 맞게 설정할 수가 있다.

pom.xml
<profiles>
    <profile>
        <id>platform-mac-m1</id>
        <activation>
            <os>
                <family>mac</family>
                <arch>aarch64</arch>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jetbrains.skija</groupId>
                <artifactId>skija-macos-arm64</artifactId>
                <version>0.93.6</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>platform-mac-intel</id>
        <activation>
            <os>
                <family>mac</family>
                <arch>x86_64</arch>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jetbrains.skija</groupId>
                <artifactId>skija-macos-x64</artifactId>
                <version>0.93.6</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>platform-windows</id>
        <activation>
            <os>
                <family>windows</family>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jetbrains.skija</groupId>
                <artifactId>skija-windows</artifactId>
                <version>0.93.6</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>platform-linux</id>
        <activation>
            <os>
                <family>unix</family>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jetbrains.skija</groupId>
                <artifactId>skija-linux</artifactId>
                <version>0.93.1</version>
            </dependency>
        </dependencies>
    </profile>
</profiles>

이렇게 설정하면 아래와 같이 os에 맞게 자동으로 선택되는 것을 확인할 수 있다. (mac m1)




<os> 엘리먼트 설명

<os> 엘리먼트는 <activation> 내에서 사용된다. <os>는 Maven enforcer plugin에서 사용된 <requireOS> 엘리먼트에서 정의된 것과 같은 파라미터이다.

아래의 태그를 사용할 수 있다.

<os>
  <name></name>
  <family></family>
  <arch></arch>
  <version></version>
  <display></display>    
  <message></message>  
</os> 

1. <name> : OS 이름
2. <family> : dos, mac, netware, os/2, tandem, unix, windows, win9x, z/os, os/400 와 같은 OS 제품군.
3. <arch> : CPU 아키텍처.
4. <version> : OS 버전
5. <display> : 탐지된 OS 정보를 표시할 지 여부.
6. <message> : 실패했을 경우에 표시할 메시지

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유