Bonjour à tous,

Je développe en java depuis quelques années maintenant, et j'utilise maven depuis autant de temps.

Je travaille sur un projet de chat de proximité en java afin d'acquérir de nouvelle connaissances (Multithread, réseau, TargetDataLine, SourceDataLine etc..), et pour des raisons d'optimisation de bande passante, je dois trouver un moyen d'encoder le tableau d'octet représentant un échantillon en provenance du microphone.

Je sais que Mumble https://github.com/mumble-voip propose déjà cette technologie mais je souhaite le faire également, même si bien évidemment ça ne sera pas aussi performant. Il est écrit que ce logiciel se base sur le projet Audio Codec https://github.com/xiph/opus lequel est écrit en C.

C'est donc pour moi la première fois que je dois travailler avec du code natif et par conséquent, c'est la première fois que je dois travailler avec JNA.
LE PROBLEME : Je n'arrive pas à charger la dll correctement.

Pour des raisons de flexibilité, le projet est divisé en sous projet listé ici de la couche la plus basse à la couche la plus haute:

Communication : envoyer/recevoir de manière asynchrone des octets à partir du réseau.
Messenger : structurer un message à envoyer.

mumble-common : Liste l'ensemble des requêtes supportées par le client et le serveur. il a comme dépendance Communication et Messenger.
sound : Permet d'avoir accès au micro, aux enceintes. C'est ce projet qui va intégrer la dll pour optimiser la bande passante.

mumble-client : Propose un package afin d'envoyer les requêtes au serveur sans se soucier de la structure du message. Il a comme dépendance mumble-common et sound.

mumble-client-gui : Jar que l'utilisateur final va exécuter. il a comme dépendance mumble-client.

J'ai trouvé ce projet : https://github.com/tbocek/opus-wrapper qui propose un wrapper java pour utiliser la librairie opus. J'ai donc ajouté ce projet en tant que dépendance maven pour le projet sound comme indiqué dans le lien, mais lorsque j'essaie d'exécuter mumble-client-gui, j'obtient ceci :

java.lang.UnsatisfiedLinkError: Unable to load library 'opus': Native library (win32-x86-64/opus.dll) not found in resource path [liste des resources path]
Ce que j'ai essayé jusqu'ici :

Modifier le class path dur projet sound à partir d'éclipse, mais premièrement cela n'a rien changé, et deuxièmement je dois fournir un chemin absolue.
Utilisation de maven-nativedependencies-plugin mais là non plus, je n'ai pas eu de résultats concrets.
Intégration de la dll directement dans le projet sound, sans passer par le wrapper java, mais java me dit qu'il ne trouve pas la dll dans le resource path.
Me passer de JNA et copier-coller la dll dans un répertoir connu et utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
System.load("absolute/path/to/library")
mais j'ai fait face à un autre problème : j'ai une exception comme quoi la dll est en 32 bit alors que la JVM est en 64 bit même si pourtant la dll est BIEN en 64 bit. Mais je pense que c'est un problème inutile si j'arrive à utiliser JNA.

Je me retrouve donc un peu coincé.

L'idée que je cherche devrait respecter les critères suivants :
Fonctionne peu importe si mumble-client-gui est lancé à partir d'un IDE ou à partir du jar.
Modifier le resource path en précisant un chemin relatif avec maven.

Je serais ravi de fournir du code source à votre demande.

PS : Le pom du projet sound :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>fr.pederobien</groupId>
	<artifactId>sound</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>sound</name>
	<url>http://maven.apache.org</url>
 
	<properties>
		<author>Pierre-Emmanuel41</author>
		<project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.source>1.8</maven.compiler.source>
	</properties>
 
	<repositories>
		<repository>
			<id>tomp2p.net</id>
			<url>http://tomp2p.net/dev/mvn/</url>
		</repository>
	</repositories>
 
	<dependencies>
		<dependency>
			<groupId>fr.pederobien</groupId>
			<artifactId>utils</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>net.tomp2p</groupId>
			<artifactId>opus-wrapper</artifactId>
			<version>1.3</version>
		</dependency>
	</dependencies>
 
	<build>
		<finalName>sound</finalName>
		<sourceDirectory>src/main/java</sourceDirectory>
		<resources>
			<resource>
				<targetPath>./src/main/resources/natives</targetPath>
				<filtering>true</filtering>
				<directory>${basedir}/src/main/resources/natives</directory>
				<includes>
					<include>libopus.dll</include>
				</includes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>3.0.0</version>
				<configuration>
					<archive>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>3.2.0</version>
 
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<appendAssemblyId>false</appendAssemblyId>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>3.2.0</version>
				<executions>
					<execution>
						<id>src</id>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

Je vous remercie par avance de vos réponse