maven:用appassembler-maven-plugin打包含有自定义目录的JAVA程序

问题说明:

用maven构建了一个项目,目录结构如下:

image

appassemblerd的配置:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>2.0.0</version>
                <configuration>
                    <!-- 生成linux, windows两种平台的执行脚本 -->
                    <platforms>
                        <platform>windows</platform>
                        <platform>unix</platform>
                    </platforms>
                    <!-- 根目录 -->
                    <assembleDirectory>${project.build.directory}/logtask</assembleDirectory>
                    <!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
                    <repositoryName>lib</repositoryName>
                    <!-- 可执行脚本的目录 -->
                    <binFolder>bin</binFolder>
                    <!-- 配置文件的目标目录 -->
                    <configurationDirectory>conf</configurationDirectory>
                    <!-- 拷贝配置文件到上面的目录中 -->
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <!-- 从哪里拷贝配置文件 (默认src/main/config) -->
                    <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                    <!-- lib目录中jar的存放规则,默认是${groupId}/${artifactId}的目录格式,flat表示直接把jar放到lib目录 -->
                    <repositoryLayout>flat</repositoryLayout>
                    <encoding>UTF-8</encoding>
                    <logsDirectory>logs</logsDirectory>
                    <tempDirectory>tmp</tempDirectory>
                    <programs>
                        <program>
                            <!-- 启动类 -->
                            <mainClass>net.test.App</mainClass>
                            <jvmSettings>
                                <extraArguments>
                                    <extraArgument>-server</extraArgument>
                                    <extraArgument>-Xmx2G</extraArgument>
                                    <extraArgument>-Xms2G</extraArgument>
                                </extraArguments>
                            </jvmSettings>
                        </program>
                    </programs>
                </configuration>
            </plugin>

在这种配置下打包时遇到了问题,第一把配置文件和自己的class达成了一个jar,导致无法修改jdbc.properties等配置,第二把所有配置文件部分目录的放到了conf下面。

由此导致了启动时只能读取jar里面的配置文件,无法根据现场环境修改。

解决办法:

1.替换上面置为:

<plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/${project.name/classes</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${project.build.directory}/classes</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>            
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>2.0.0</version>
                <configuration>
                    <!-- 生成linux, windows两种平台的执行脚本 -->
                    <platforms>
                        <platform>windows</platform>
                        <platform>unix</platform>
                    </platforms>
                    <!-- 根目录 -->
                    <assembleDirectory>${project.build.directory}/${project.name}</assembleDirectory>
                    <!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
                    <repositoryName>lib</repositoryName>
                    <!-- 可执行脚本的目录 -->
                    <binFolder>bin</binFolder>
                    <!-- lib目录中jar的存放规则,默认是${groupId}/${artifactId}的目录格式,flat表示直接把jar放到lib目录 -->
                    <repositoryLayout>flat</repositoryLayout>
                    <encoding>UTF-8</encoding>
                    <logsDirectory>logs</logsDirectory>
                    <tempDirectory>tmp</tempDirectory>
                    <programs>
                        <program>
                            <!-- 启动类 -->
                            <mainClass>net.bwda.App</mainClass>
                            <jvmSettings>
                                <extraArguments>
                                    <extraArgument>-server</extraArgument>
                                    <extraArgument>-Xmx2G</extraArgument>
                                    <extraArgument>-Xms2G</extraArgument>
                                </extraArguments>
                            </jvmSettings>
                        </program>
                    </programs>
                </configuration>
            </plugin>

2.修改appassembler-maven-plugin-2.0.0.jar

image

修改红框内两个文件:添加classes这个路径到CLASSPATH。

windows:

image

unix:

image

如果没有本地仓库nexus,这样就可以了。

如果有则上传到本地仓库nexus的3rd party,记得必须选择pom文件上传方法,这个pom文件就是最初下载时产生的。

image

2.重新执行打包命令

mvn clean package appassembler:assemble,生成的目录结构如下:

image

2.删除生成的jar包(自己的源码生成的jar)

3.lasses复制到输出目录/target/logtask这个目录下。

image

3.修改bin下面的app.bat

image

image

dp0:表示这个app.bat所在路径,我的是:D:logtaskin。..表示返回到上级,这样就定为到了D:logtask。

image

添加 "%BASEDIR%"classes; 到CLASSPATH中。这点非常重要!

下一步就是点击app.bat启动了。

完毕!

原文地址:https://www.cnblogs.com/huiy/p/6169614.html