配置总结

一 jar包位置

1.把lib目录下所有的文件(外部依赖的jar)

2.依赖的所有maven jar包

3.可运行的工程jar文件的存放路径 (打开后是.class文件)

4.源代码的jar包(打开后是.java源文件)---四部分的jar全部放到lib目录中

二 启动命令位置

把放在根目录(不一定是根目录)下的脚本文件.sh,.bat拷贝到bin目录中

三 配置文件位置

把src/main/resources目录下所有的文件拷贝到conf目录中

四 对于工程运行的jar包

将jar包的路径添加到manifest中 ,同时排除一些.xml文件

配置1:此配置没有使用maven-assembly-plugin,把内容直接写在build中

<build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <!-- 把src/main/resources目录下所有的文件拷贝到conf目录中 -->
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>${project.build.directory}/conf</targetPath>
            </resource>
            <!-- 把lib目录下所有的文件拷贝到lib目录中
            (可能有些jar包没有办法在maven中找到,需要放在lib目录中) -->
            <resource>
                <directory>lib</directory>
                <targetPath>${project.build.directory}/lib</targetPath>
            </resource>
            <!-- 把放在根目录下的脚本文件.sh,.bat拷贝到bin目录中 -->
            <resource>
                <directory>.</directory>   //具体的脚本放置位置可以改,不一定是当前目录
                <includes>
                    <include>**/*.sh</include>
                    <include>**/*.bat</include>
                </includes>
                <targetPath>${project.build.directory}/bin</targetPath>
            </resource>
        </resources>
 
        <plugins>
            <!-- 用于编译的plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <fork>true</fork>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                    <!-- 如果配置了JAVA_HOME,下面应该可以不用配 -->
                    <executable>C:\Program Files (x86)\Java\jdk1.8.0_91\bin\javac.exe</executable>
                </configuration>
            </plugin>
             
            <!-- 用于生成jar包的plugin -->  打包后的jar包内部具体的图见下文图
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!-- 把生成的jar包放在lib目录下(和其他所有jar包一起) -->
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <archive>
                        <manifest>
                        <addClasspath>true</addClasspath> //将jar包的路径添加到manifest中,具体可见下图
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
                <excludes>
                <!-- 排除掉一些文件,不要放到jar包中,
                这里是为了排除掉src/main/resources中的文件(它们应该放到conf目录)
                这里只能指定要排除的目标文件,而不能指定源文件,虽然不够完美,但是基本能达到目的。 -->
                    <exclude>*.xml</exclude>
                    <exclude>*.properties</exclude>
                </excludes>
            </configuration>
        </plugin>
         
        <!-- 用于拷贝maven依赖的plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                    <!-- 把依赖的所有maven jar包拷贝到lib目录中(这样所有的jar包都在lib目录中) -->
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
         
        <!-- 用于拷贝resource的plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
 
        <!-- 配置生成源代码jar的plugin -->
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <attach>true</attach>
                <encoding>UTF-8</encoding>
                <!-- 配置源代码jar文件的存放路径,和其他jar文件一起放在lib目录 -->
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
         
    </plugins>
</build>

运行mvn install后 生成的目录如下:可以看到,最终的配置都是在外面的目录,如果要部署的话,最好是三个目录在一个tar包里面(见后面的实战)

maven 多模块打包 sonar_jar包

配置2.项目实战配置,使用maven-assembly-plugin

<build>
        <finalName>dupchk</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <!-- The configuration of the plugin -->
                <configuration>
                    <!-- Configuration of the archiver -->
                    <archive>
 
                        <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>false</addMavenDescriptor>
 
                        <!-- Manifest specific configuration -->
                        <manifest>
                            <!-- 是否要把第三方jar放到manifest的classpath中 -->
                            <addClasspath>true</addClasspath>
                            <!-- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ -->
                            <classpathPrefix>lib/</classpathPrefix>
                            <!-- 应用的main class -->
                            <mainClass>com.cmsz.itbrs.dupchk.main.App</mainClass>
                        </manifest>
                    </archive>                   
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <!-- The configuration of the plugin -->
                <configuration>
                    <!-- Specifies the configuration file of the assembly plugin -->
                    <descriptors>
                        <descriptor>src/main/assembly/package.xml</descriptor> //xml文件中配置了打包的相关配置
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

package.xml以及脚本的具体位置

maven 多模块打包 sonar_jar包_02

package.xml 具体的配置内容,和配置一是类似的

<assembly> 
    <id>bin</id>  //此处是打包名称的设置,最后是最后会生成一个dupcheck-bin.jar 文件在目录 target 下,其中前一个dupcheck来自finalName,后一个id来自assembly descriptor中的id(bin名称随便改)
    <!-- 最终打包成一个用于发布的zip文件 --> 
    <formats> 
        <format>tar</format> 
    </formats> 
   
    <!-- Adds dependencies to zip package under lib directory --> 
    <dependencySets> 
        <dependencySet> 
            <!-- 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录 --> 
            <useProjectArtifact>true</useProjectArtifact> 
            <outputDirectory>lib</outputDirectory> 
            <unpack>false</unpack> 
        </dependencySet> 
    </dependencySets> 
   
    <fileSets> 
           
        <!-- 把项目的配置文件,打包进zip文件的config目录 --> 
        <fileSet> 
            <directory>${project.basedir}/src/main/resources</directory> 
            <outputDirectory>config</outputDirectory> 
            <includes> 
                <include>*.properties</include> 
            </includes> 
        </fileSet> 
           
        <!-- 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 --> 
        <fileSet> 
            <directory>${project.basedir}/src/main/scripts</directory> 
            <outputDirectory>bin</outputDirectory> 
            <includes> 
                <include>startup.*</include> 
            </includes> 
        </fileSet> 
           
    </fileSets> 
</assembly>

打包后打开生成的tar包(dupcheck-bin.tar),可以看到以上配置的一个具体目录。

maven 多模块打包 sonar_jar_03

点开lib里面我们运行程序的jar包,在打开manifest.MF文件,可以看到文件里面已经将所有依赖的jar的路径写入了classpath路径

maven 多模块打包 sonar_maven 多模块打包 sonar_04

maven 多模块打包 sonar_build配置_05