Можно ли определить среду для предустановки javacpp в pom?

Можно ли определить целевую среду для предустановок javacpp (платформа opencv) в файле pom.xml? Я знаю, что вы можете установить свойство -Djavacpp.platform при выполнении mvn clean install. Это активирует правильный профиль maven и не добавит другие системные библиотеки в финальную банку. Но есть ли возможность определить платформу непосредственно в pom, чтобы избежать аргумента -D при выполнении maven?

Спасибо!


person Chr3is    schedule 22.09.2019    source источник


Ответы (1)


Вот решение, которое я придумал:

<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>opencv</artifactId>
    <version>${opencv.version}</version>
</dependency>

<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>opencv</artifactId>
    <version>${opencv.version}</version>
    <classifier>${os.detected.classifier}</classifier>
</dependency>

${os.detected.classifier} можно установить в файле pom. Я использую это свойство со следующим расширением сборки:

<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.6.1</version>
        </extension>
    </extensions>
...

Это расширение (https://github.com/trustin/os-maven-plugin ) обнаружит ОС во время сборки и установит правильный классификатор через это свойство.

person Chr3is    schedule 02.10.2019
comment
Да, это почти единственный способ сделать это, хотя мы можем использовать родительский файл pom.xml, чтобы получить это свойство: github.com/bytedeco/javacpp-presets/blob/master/pom.xml#L1920 Однако проблема с этим подходом заключается в том, что он не работает транзитивно. Это не масштабируемый подход, поэтому в будущем вы снова и снова будете сталкиваться с одной и той же проблемой. - person Samuel Audet; 21.10.2019