Java Maven Spring Boot UnsatisfiedLinkError when spring-boot:run with own library copied at project

huangapple 未分类评论51阅读模式
英文:

Java Maven Spring Boot UnsatisfiedLinkError when spring-boot:run with own library copied at project

问题

我有一个默认的jersey项目,从https://start.spring.io/下载,我在其中添加了一个lib文件夹,里面有一个在c ++中编译的库,通过JNI进行调用。在Eclipse中将“lib”目录添加到类路径中,并通过“Java Application”选项完美运行。当尝试使用maven命令`mvn spring-boot:run`直接运行时,尝试加载库时会出现错误。我的pom文件如下:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>ec.com.extractdatacom</groupId>
	<artifactId>RestExtractDataDicom</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>RestExtractDataDicom</name>
	<description>Proyecto para procesar archivos dicom</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jersey</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
		    <groupId>org.glassfish.jersey.media</groupId>
		    <artifactId>jersey-media-multipart</artifactId>
		</dependency>
		
		<dependency>
	        <groupId>commons-fileupload</groupId>
	        <artifactId>commons-fileupload</artifactId>
	        <version>1.3.3</version>
	    </dependency>
	    
	    <!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
		<dependency>
		    <groupId>com.opencsv</groupId>
		    <artifactId>opencsv</artifactId>
		    <version>5.0</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
		    <groupId>org.eclipse.swt</groupId>
		    <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
		    <version>4.3</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.0.0-M4</version>
				<configuration>
					<additionalClasspathElements>
						<additionalClasspathElement>${project.basedir}/lib</additionalClasspathElement>
					</additionalClasspathElements>
					<systemPropertyVariables>
						<propertyName>java.library.path</propertyName>
						<buildDirectory>${project.basedir}/lib</buildDirectory>
					</systemPropertyVariables>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

当使用mvn spring-boot:run命令直接运行时,出现的错误是:

java.lang.UnsatisfiedLinkError: no ExtractDataDicom in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) ~[na:1.8.0_121]
        at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[na:1.8.0_121]
        at java.lang.System.loadLibrary(System.java:1122) ~[na:1.8.0_121]
        at ec.com.extractdatacom.jni.ExtractDataDicom.<clinit>(ExtractDataDicom.java:12) ~[classes/:na]

<details>
<summary>英文:</summary>

I have a default jersey project, downloaded from https://start.spring.io/ to which I added a lib folder and in it a library compiled in c ++ to be called via JNI. In Eclipse add the &quot;lib&quot; directory to the classpath and it runs perfectly through the &quot;Java Application&quot; option. When trying to run direct with the maven command `mvn spring-boot:run`, it gives me error when trying to load the library. my pom file is:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd&quot;>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>ec.com.extractdatacom</groupId>
<artifactId>RestExtractDataDicom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>RestExtractDataDicom</name>
<description>Proyecto para procesar archivos dicom</description>

&lt;properties&gt;
	&lt;java.version&gt;1.8&lt;/java.version&gt;
&lt;/properties&gt;

&lt;dependencies&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-jersey&lt;/artifactId&gt;
	&lt;/dependency&gt;
	
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-devtools&lt;/artifactId&gt;
		&lt;optional&gt;true&lt;/optional&gt;
	&lt;/dependency&gt;

	&lt;dependency&gt;
	    &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt;
	    &lt;artifactId&gt;jersey-media-multipart&lt;/artifactId&gt;
	&lt;/dependency&gt;
	
	&lt;dependency&gt;
        &lt;groupId&gt;commons-fileupload&lt;/groupId&gt;
        &lt;artifactId&gt;commons-fileupload&lt;/artifactId&gt;
        &lt;version&gt;1.3.3&lt;/version&gt;
    &lt;/dependency&gt;
    
    &lt;!-- https://mvnrepository.com/artifact/com.opencsv/opencsv --&gt;
	&lt;dependency&gt;
	    &lt;groupId&gt;com.opencsv&lt;/groupId&gt;
	    &lt;artifactId&gt;opencsv&lt;/artifactId&gt;
	    &lt;version&gt;5.0&lt;/version&gt;
	&lt;/dependency&gt;

	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
		&lt;scope&gt;test&lt;/scope&gt;
		&lt;exclusions&gt;
			&lt;exclusion&gt;
				&lt;groupId&gt;org.junit.vintage&lt;/groupId&gt;
				&lt;artifactId&gt;junit-vintage-engine&lt;/artifactId&gt;
			&lt;/exclusion&gt;
		&lt;/exclusions&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
	    &lt;groupId&gt;org.eclipse.swt&lt;/groupId&gt;
	    &lt;artifactId&gt;org.eclipse.swt.gtk.linux.x86_64&lt;/artifactId&gt;
	    &lt;version&gt;4.3&lt;/version&gt;
	&lt;/dependency&gt;
&lt;/dependencies&gt;

&lt;build&gt;
	&lt;plugins&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
			&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
		&lt;/plugin&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
			&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
			&lt;version&gt;3.0.0-M4&lt;/version&gt;
			&lt;configuration&gt;
				&lt;additionalClasspathElements&gt;
					&lt;additionalClasspathElement&gt;${project.basedir}/lib&lt;/additionalClasspathElement&gt;
				&lt;/additionalClasspathElements&gt;
				&lt;systemPropertyVariables&gt;
					&lt;propertyName&gt;java.library.path&lt;/propertyName&gt;
					&lt;buildDirectory&gt;${project.basedir}/lib&lt;/buildDirectory&gt;
				&lt;/systemPropertyVariables&gt;
			&lt;/configuration&gt;
		&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;

</project>


The error, only when `mvn spring-boot:run` is:

java.lang.UnsatisfiedLinkError: no ExtractDataDicom in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) ~[na:1.8.0_121]
at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[na:1.8.0_121]
at java.lang.System.loadLibrary(System.java:1122) ~[na:1.8.0_121]
at ec.com.extractdatacom.jni.ExtractDataDicom.<clinit>(ExtractDataDicom.java:12) ~[classes/:na]


</details>


huangapple
  • 本文由 发表于 2020年5月4日 09:04:40
  • 转载请务必保留本文链接:https://java.coder-hub.com/61583675.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定