Использование maven с DLL от стороннего производителя и управление именем DLL - PullRequest
0 голосов
/ 19 мая 2018

У меня есть проект maven, и я использую nativedependencies-maven-plugin (https://github.com/fmarot/nativedependencies-maven) для управления DLL.

DLL от стороннего производителя и имеет следующую структуру. Допустим, чтоимя файла JAR - abc.jar, а соответствующая DLL - abcxyz.dll, где xyz - номер версии без периодов. Поэтому, если версия 12.6.1, библиотека DLL называется abc1261.dll. Если сторонняя версия обновляетсяих продукт до версии 12.7.0, они выпускают новый JAR abc.jar и новую DLL abc1270.dll.

Я храню JAR в локальном репозитории, и имя JAR, как отражено вв этом случае хранилище - abc-x.y.z.jar. Я помещаю классификатор в DLL с именем natives-abc, а имя библиотеки DLL в хранилище (после развертывания) - abc-x.y.z-natives-abc.dll. Когда я собираю проект, abc-x.y.z-natives-abc.dll затем правильно копируетсяв папку target/natives с помощью nativedependencies-maven-plugin.

Когда я запускаю проект из Eclipse, он не работает, потому что JAR ищет abcxyz.dll, а не abc-x.y.z-natives-abc.dll. Если я копирую abc-x.y.z-natives-abc.dll в abcxyz.dll в папке target/natives, тогда все работает, так что я знаюна java.library.path устанавливается правильно, что я также проверил, проверив процесс с помощью инструмента jinfo.

Мне нужно, чтобы DLL была переименована после ее копирования из локального репозитория.в target/natives.Я не могу понять, как заставить maven делать это.

Я хочу иметь разные версии abc.jar и abcxyz.dll в локальном хранилище, а затем просто изменить теги <version>в файле pom.xml для ссылки на разные версии.Имя файла JAR при развертывании не имеет значения, но его имя связано с DLL, потому что файл JAR стороннего производителя для определенной версии ищет определенное имя DLL, соответствующее версии.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Приведенное выше предложение сработало.Мне нужно было создать zip, содержащий abcxyz.dll (называющий его abcxyz.dll.zip), добавить его в репозиторий maven с использованием zip упаковки, а затем сделать так, чтобы зависимость в pom.xml ссылалась на это.

Другими словами, вот раздел pom.xml, который имел зависимость:

<dependency>
    <groupId>com.thegroup</groupId>
    <artifactId>abc</artifactId>
    <version>12.6.1</version>
    <type>zip</type>
    <classifier>natives-abc</classifier>
</dependency>

Я только использовал WinZip для создания Zip.

mvn deploy:deploy-file -Durl=file:///path-to-my-repo -Dfile=abc1261.dll.zip -DgroupId=com.thegroup -DartifactId=abc -Dpackaging=zip -Dversion=12.6.1 -Dclassifier=natives-abc
0 голосов
/ 19 мая 2018

Мейнтейнер nativedependencies-maven-plugin здесь.

Я не уверен, что полностью понимаю, но думаю, у меня есть решение: если бы вы развернули / установили в своем репозитории (локальном или нет) .jar(не .dll), предоставленный вашей партией 3 rd , тогда, когда Maven получит эту зависимость и разархивирует ее (с nativedependency-maven-plugin), он не будет затрагивать имя .dll внутри него.,Таким образом, ваш код (или сторонний код) правильно найдет его во время выполнения.

Если ваш собственный код загружает DLL, я бы предложил переименовать DLL в уникальное имя без версии, чтобы упроститьпроцесс.Надеюсь, это поможет.

...