Utiliser maven avec DLL de tiers et gérer le nom de la DLL

j'ai un projet maven et j'utilise le nativedependencies-maven-plugin ( https://github.com/fmarot/nativedependencies-maven ) pour gérer la DLL.

la DLL est d'un tiers, et a la structure suivante. Disons que le nom du fichier JAR est abc.jar et la DLL correspondante est abcxyz.dll , où xyz est le numéro de version sans périodes. Donc si la version est 12.6.1, la DLL est nommée abc1261.dll . Si le tiers met à jour leur produit à la version 12.7.0, ils émettent un nouveau pot abc.jar et une nouvelle DLL abc1270.dll .

je stocke la jarre dans un dépôt local, et le nom de la jarre tel qu'indiqué dans le dépôt est alors abc-x.y.z.jar . J'ai mis un classificateur sur la DLL appelée natives-abc , et le nom de la DLL dans le dépôt (une fois déployé) est abc-x.y.z-natives-abc.dll . Lorsque je construis le projet, abc-x.y.z-natives-abc.dll est alors copié correctement dans le dossier target/natives par le nativedependencies-maven-plugin .

quand je dirige le projet à partir D'Eclipse, il échoue, parce que le bocal cherche abcxyz.dll et non abc-x.y.z-natives-abc.dll . Si je copie abc-x.y.z-natives-abc.dll dans abcxyz.dll dans le dossier target/natives , alors tout fonctionne, donc je sais que le java.library.path est réglé correctement, ce que j'ai également vérifié en inspectant le processus en utilisant l'outil jinfo .

ce dont j'ai besoin c'est que la DLL soit renommée une fois qu'elle est copiée à partir du dépôt local dans target/natives . Je ne sais pas comment faire faire ça à maven.

ce que je veux faire, c'est avoir des versions différentes de abc.jar et abcxyz.dll dans le dépôt local, et puis changer les étiquettes <version> dans le fichier pom.xml pour se référer à différentes versions. Le nom du fichier JAR dans le déploiement n'est pas pertinent, mais C'est le nom DLL associé qui est pertinent parce que le fichier JAR du tiers pour une version spécifique cherche un nom DLL spécifique correspondant à la version.

0
demandé sur Irv 2018-05-19 06:20:57

2 réponses

mainteneur de nativedependencies-maven-plugin here.

Je ne suis pas sûr de comprendre complètement mais je pense que j'ai une solution: si vous deviez déployer/installer dans votre repo (local ou non) le .pot (pas la .dll) fourni par votre tiers, puis quand Maven obtiendra cette dépendance et la décompressera (avec le nativedependency-maven-plugin), il gardera intact le nom de la .dll à l'intérieur. Ainsi, votre code (ou le code de la tierce partie) le trouvera correctement à l'exécution.

si votre propre code charge la DLL, j'aurais suggéré de renommer la DLL en un nom unique sans la version pour simplifier le processus. Espérons que cela aide.

1
répondu Francois Marot 2018-05-19 14:17:15

la suggestion ci-dessus a fonctionné. Ce que je devais faire était de créer un zip contenant abcxyz.dll , (l'appelant abcxyz.dll.zip ), ajouter cela au dépôt maven en utilisant zip packaging, et ensuite faire référence à la dépendance dans pom.xml .

en d'autres termes, Voici la section du pom.xml qui avait la dépendance:

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

je viens d'utiliser WinZip pour créer le 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
répondu Irv 2018-05-21 15:53:41