如何用Maven把依赖也打到可自动执行的jar里面?
2017-01-13 00:22
453 查看
最近笔者在用Maven打成一个可执行的jar包(包括main方法)的时候,遇到一个比较诡异的错误,Error: A JNI error has occurred, please check your installation and try again。下面是笔者的Manifest文件。那么如何解决呢?
下面是笔者的jar的代码结构,
Manifest文件都是对的。指向的路径也是对的。但是在jar运行的时候,就是找不到jar文件里面的lib目录下的依赖的jar文件。
下面这个是笔者自己的在pom.xml文件中用的Build部分的plugin
当前解决的方式,是用不要把把依赖的jar和可执行的jar放在一起,而是直接把依赖的jar文件,解压缩成class文件,然后和我们自己生成的代码放在一起,正确的pom.xml文件中用的Build部分的plugin应该如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includes>**/*.class</includes>
<excludes>**/*.properties</excludes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.winneryum.csdn.CSDNAutomationAccess</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
上面只是笔者自己的一种解决方案,如果大家有其他的解决方案,希望能给我留言,我把其也添加到里面来。
Manifest-Version: 1.0 Built-By: HenryZhu Build-Jdk: 1.7.0_55 Class-Path: lib/junit-4.12.jar lib/hamcrest-core-1.3.jar lib/selenium- java-3.0.1.jar lib/selenium-chrome-driver-3.0.1.jar lib/selenium-remo te-driver-3.0.1.jar lib/selenium-api-3.0.1.jar lib/cglib-nodep-3.2.4. jar lib/commons-exec-1.3.jar lib/gson-2.3.1.jar lib/guava-19.0.jar li b/jna-platform-4.1.0.jar lib/jna-4.1.0.jar lib/selenium-edge-driver-3 .0.1.jar lib/selenium-firefox-driver-3.0.1.jar lib/selenium-ie-driver -3.0.1.jar lib/selenium-opera-driver-3.0.1.jar lib/selenium-safari-dr iver-3.0.1.jar lib/netty-3.5.7.Final.jar lib/selenium-support-3.0.1.j ar lib/htmlunit-2.23.jar lib/xalan-2.7.2.jar lib/serializer-2.7.2.jar lib/commons-lang3-3.4.jar lib/httpclient-4.5.2.jar lib/httpcore-4.4. 4.jar lib/httpmime-4.5.2.jar lib/commons-codec-1.10.jar lib/htmlunit- core-js-2.23.jar lib/neko-htmlunit-2.23.jar lib/xercesImpl-2.11.0.jar lib/xml-apis-1.4.01.jar lib/cssparser-0.9.20.jar lib/sac-1.3.jar lib /commons-io-2.5.jar lib/commons-logging-1.2.jar lib/phantomjsdriver-1 .3.0.jar lib/websocket-client-9.2.15.v20160210.jar lib/jetty-util-9.2 .15.v20160210.jar lib/jetty-io-9.2.15.v20160210.jar lib/websocket-com mon-9.2.15.v20160210.jar lib/websocket-api-9.2.15.v20160210.jar lib/h tmlparser-2.1.jar lib/htmllexer-2.1.jar lib/jgroups-3.0.11.Final.jar Created-By: Apache Maven 3.3.9 Main-Class: com.winneryum.csdn.CSDNAutomationAccess Archiver-Version: Plexus Archiver
下面是笔者的jar的代码结构,
Manifest文件都是对的。指向的路径也是对的。但是在jar运行的时候,就是找不到jar文件里面的lib目录下的依赖的jar文件。
下面这个是笔者自己的在pom.xml文件中用的Build部分的plugin
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/classes/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.winneryum.csdn.CSDNAutomationAccess</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> </plugins> </build>
当前解决的方式,是用不要把把依赖的jar和可执行的jar放在一起,而是直接把依赖的jar文件,解压缩成class文件,然后和我们自己生成的代码放在一起,正确的pom.xml文件中用的Build部分的plugin应该如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includes>**/*.class</includes>
<excludes>**/*.properties</excludes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.winneryum.csdn.CSDNAutomationAccess</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
上面只是笔者自己的一种解决方案,如果大家有其他的解决方案,希望能给我留言,我把其也添加到里面来。
相关文章推荐
- maven 如何让所依赖的jar都被打包在一个jar里面呢
- java命令执行jar包(里面的main函数,无web.xml文件)的方式(包括依赖其它的jar包),使用Google-Guava Concurrent包里的Service框架,maven工程
- Maven如何构建可执行的jar包(包含依赖jar包)
- 如何将maven项目包含工程依赖打包成可执行的jar
- maven3 打可执行 jar 包, 含所以依赖 jar 包
- 使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包
- 如何将maven项目打包成可执行的jar
- Maven如何手动添加依赖的jar文件到本地Maven仓库
- [j2se]如何生成自动执行的jar文件(自己收藏)
- 如何将maven项目打包成可执行的jar
- 如何让maven 将工程依赖的jar 复制到WEB-INF/lib 目录下?
- 如何将maven项目打包成可执行的jar
- Maven打包可执行的jar文件(包含所有依赖和不存在spring无法解析schema)
- Maven中如何配置WAR依赖WAR和JAR的多模块项目结构
- 如何导出maven中依赖的jar包
- 如何将maven项目打包成可执行的jar
- Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包
- 如何将maven项目打包成可执行的jar
- [置顶] Maven如何手动添加依赖的jar文件到本地Maven仓库
- 如何生成自动执行的jar文件