zoukankan      html  css  js  c++  java
  • maven 项目打包配置(build节点)

    参考博客:https://www.cnblogs.com/Binhua-Liu/p/5604841.html

    maven-assembly-plugin的使用 :

    https://www.cnblogs.com/f-zhao/p/6929814.html

    配置总结:
    一 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)Javajdk1.8.0_91injavac.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包里面(见后面的实战)

    lib目录下生成两个jar,一个是源文件source.jar(.java),一个是编译后的运行jar文件(.java)

    配置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以及脚本的具体位置

     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),可以看到以上配置的一个具体目录。

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

  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/Andrew520/p/8857603.html
Copyright © 2011-2022 走看看