Maven打可运行jar包

 

最近做一个数据转换的小程序 脚本运行的 JAVA SE

当使用之前打jar的配置时,启动报错.baidu一番是由于jar里的清单文件被覆盖导致,资源文件丢失导致

这是以前的配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.hfvast.smg.Application</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

想想也是 多个依赖jar的源码合并 以前项目就几个依赖jar碰巧没合并丢了

新的打jar包

上配置

<build>
    <finalName>dataSync</finalName>
    <resources>
        <!-- 控制资源文件的拷贝 -->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*</include>
            </includes>
            <!--<filtering>false</filtering>-->

            <!-- 配置文件外置(在打包时取消注释)
                资源文件拷贝到编译输出路径target的子文件夹config目录下,最终结构如下:
                target
                   ...config
                       ...spring
                       ...mapper
                       ...env
                   ...lib
                   ...generateImportCarSql.jar
             -->
            <!--<targetPath>${project.build.directory}/config</targetPath>-->
        </resource>
    </resources>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <!-- 清单文件 -->
                    <manifest>
                        <mainClass>com.hfvast.dataSync.AppConfig</mainClass>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                    <!-- 给清单文件添加键值对(配置文件外置) -->
                    <manifestEntries>
                        <Class-Path>config/</Class-Path>
                    </manifestEntries>
                </archive>
                <classesDirectory>
                </classesDirectory>
            </configuration>
        </plugin>
        <!-- 拷贝依赖的jar包到lib目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 解决资源文件的编码问题 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

我们知道打war包时,依赖都会放在WEB-INF/lib 目录下 类加载器会加载这个目录下的依赖.

这个配置就是将依赖专门放到lib目录下 将配置放到config下 打源码包时指定配置

注意: 配置文件的路径必须是以classpath: 开头

当开发时,就是上面的配置.当打包时,将<!--<targetPath>${project.build.directory}/config</targetPath>-->这行注释放开.

执行mvn package就会把资源文件编译到指定位置

之后将target目录下的 lib conf dataSync.jar 三个文件夹或文件 sftp 到 服务器 执行java -jar dataSync.jar 就可以启动程序了.

如果你能看懂以上配置,那么你肯定知道 jdk环境变量为什么这么配置了

export JAVA_HOME=/root/jdk1.8.0_121
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar