springboot工程打包引用外部jar包

Dcr 1年前 ⋅ 1051 阅读

背景

测试生产环境jdk未引用javascriptEngine,导致规则模块一直报Engine空指针.

解决方案

直接将缺失的jar包放在工程内部,pom文件指向项目目录,打包时将jar包一起打进去就可以了

demo

pom.xml

<dependency>
        <groupId>jdk</groupId>
        <artifactId>xxx</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/../xxxxx/src/main/resources/lib/xxx.jar</systemPath>
</dependency>

assembly.xml


<fileSet>
        <directory>${project.basedir}/../xxxxx/src/main/resources/lib</directory>
        <outputDirectory>${file.separator}/lib</outputDirectory>
</fileSet>

相关配置解释

maven assembly配置

Assembly概念

“assembly”是把一组文件、目录、依赖元素组装成一个归档文件. 比如, 假设一个 Maven project定义了一个JAR artifact,它包含控制台应用程序和Swing应用程序 。这样一个工程可以定义两套包含描述符,一套给给控制台应用,另一套给Swing应用程序,它们包含各自的脚本、目录和依赖。

Assembly Plugin的描述符可以定义任何一个文件或者目录归档方式。举个例子,如果的你的Maven 2工程包含”src/main/bin”这个目录,你可以指示Assembly插件复制“src/main/bin”目录下所有的文件到bin目录里(归档文件里的目录),并且可以修改它们的权限属性(UNIX mode)

  • 在pom.xml文件里的配置声明
<plugin>  
    <artifactId>maven-assembly-plugin</artifactId>  
    <executions>  <!--执行器 mvn assembly:assembly-->  
        <execution>  
            <id>make-zip</id><!--名字任意 -->    
        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->    
        <goals>    
           <goal>single</goal><!-- 只运行一次 -->    
        </goals>    
            <configuration>  
                     <descriptors> <!--描述文件路径-->  
                          <descriptor>src/main/resources/zip.xml</descriptor>  
                    </descriptors>  
            </configuration>  
        </execution>  
    </executions>  
 </plugin>  
  • 在zip.xml文件配置
<assembly  
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">  
    <id>release</id>  
    <formats>  
        <format>zip</format>  
    </formats>  
    <fileSets>  
        <fileSet>  
            <directory>${project.basedir}\src\main\config</directory>  
            <!-- 过滤 -->  
            <excludes>  
                <exclude>*.xml</exclude>  
            </excludes>  
            <outputDirectory>\</outputDirectory>  
        </fileSet>  
    </fileSets>  
      
    <dependencySets>  
        <dependencySet>  
            <useProjectArtifact>true</useProjectArtifact>  
            <outputDirectory>lib</outputDirectory><!-- 将scope为runtime的依赖包打包到lib目录下。 -->  
            <scope>runtime</scope>  
        </dependencySet>  
    </dependencySets>  
</assembly>  
  • zip.xml格式属性说明 打包的文件格式 可以有:tar.zip war zip
<formats>
 <format>zip</format>
</formats>

需要打包的路径

<directory>${project.basedir}</directory>

打包后输出的路径

<outputDirectory>/</outputDirectory>

打包需要包含的文件

 <excludes>
        <exclude>junit:junit</exclude>
        <exclude>commons-lang:commons-lang</exclude>
        <exclude>commons-logging:commons-logging</exclude>
</excludes>

当前项目构件是否包含在这个依赖集合里。

<useProjectArtifact>true</useProjectArtifact>

依赖包打包到目录下

<dependencySets>
  <dependencySet>
   <outputDirectory>lib</outputDirectory><!-- 将scope为runtime的依赖包打包到lib目录下。 -->
   <useProjectArtifact>true</useProjectArtifact>
   <scope>runtime</scope>
  </dependencySet>
</dependencySets>

全部评论: 0

    我有话说: