• 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路径

  • 相关阅读:
    linux vsftpd
    java运用FFMPEG视频转码技术
    使用ffmpeg实现转码样例(代码实现)
    最简单的基于FFMPEG的转码程序
    关于Android Studio升级到2.0后和Gradle插件不兼容的问题
    Android设计模式之命令模式、策略模式、模板方法模式
    Android设计模式源码解析之桥接模式
    Android 项目利用 Android Studio 和 Gradle 打包多版本APK
    RTMP协议详解(转)
    Android 如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
  • 原文地址:https://www.cnblogs.com/Andrew520/p/8857603.html
Copyright © 2020-2023  润新知