发表于: 2017-10-15 23:17:55
1 851
今天完成的事情:完成了任务八的服务器
今天对这个打包进行了一番实验
首先先直接把servlet的程序 clean package
好吧 打错了 打成war报了 配置文件开头改一下 重来
<modelVersion>4.0.0</modelVersion>
<groupId>com.jnshu</groupId>
<artifactId>task8server</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>task8server Maven Webapp</name>
<url>http://maven.apache.org</url>
然后用压缩软件打开jar
果然 关于可执行程序(需要指定一个 main 类)打 jar 包我们需要考虑以下几个问题:
- 配置文件需要打进 jar 包;需要指定 main 入口类;所依赖的第三方库也要打进 jar 包;
maven-assembly-plugin 插件 先来试一下
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.jnshu.RMIserviceTest</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>他自动下了一大堆 变得好大 执行一下
听说这个插件有bug,它在对第三方打包时,对于 META-INF 下的 spring.handlers,spring.schemas 等多个同名文件进行了覆盖,遗漏掉了一些版本的 xsd 本地映射。
果然 跟下面的对比一下 是少了很多
换用 maven-shade-plugin 插件,对于多个第三方包 META-INF 下的同名的 spring.handlers 文件它采取的态度是追加而不是覆盖。
执行 maven clean package,成功构建 swiftonrsa-1.0.0.jar,查看其打包目录,各种配置文件以及第三方依赖包也都有,以及 META-INF 目录中的 MANIFEST.MF 的内容,基本如 maven-assembly-plugin 打包后的样子,执行之:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.jinshu。RMIserviceTest</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>呵呵了
听说是 由于一些包重复引用,打包后的 META-INF 目录多出了一些 *.SF 等文件所致。看一下
pom.xml 添加:
- <configuration>
- <filters>
- <filter>
- <artifact>*:*</artifact>
- <excludes>
- <exclude>META-INF/*.SF</exclude>
- <exclude>META-INF/*.DSA</exclude>
- <exclude>META-INF/*.RSA</exclude>
- </excludes>
- </filter>
- </filters>
- </configuration>
再看一下
果然没有了那些sf
终于成功了 不过这个log4j好像没有引入进去
明天计划的事情:任务九
遇到的问题:这里要注意的是 记得每次clean install 之前都要把相关的文件 关掉 否则会报错
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-cli) on project task8server: Failed to clean project: Failed to delete E:\other\shidi\task8server\target\task8server.jar -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
clean一直报这个错误
就是因为有相关的没有关 保护了
收获:对于maven复习了一波 打了jar war
评论