zoukankan      html  css  js  c++  java
  • 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启动了。

    完毕!

  • 相关阅读:
    AngularJS数据建模(转载)
    Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
    EF开发程序经常用的几个东西
    jQuery插件---轻量级的弹出窗口wBox
    SQL Server 索引维护sql语句
    windows server2008 r2 下启用 sqlserver 2008的远程连接
    windows2012 r2 提高网速方法
    jQuery validation
    Bootstrap Modal 垂直居中
    shell 循环读取文件及字符串转为数组
  • 原文地址:https://www.cnblogs.com/huiy/p/6169614.html
Copyright © 2011-2022 走看看