发表于: 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 添加:

    1. <configuration>  
    2.   <filters>  
    3.     <filter>  
    4.       <artifact>*:*</artifact>  
    5.       <excludes>  
    6.         <exclude>META-INF/*.SF</exclude>  
    7.         <exclude>META-INF/*.DSA</exclude>  
    8.         <exclude>META-INF/*.RSA</exclude>  
    9.       </excludes>  
    10.     </filter>  
    11.   </filters>  
    12. </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


返回列表 返回列表
评论

    分享到