赞
踩
在使用maven、gradle对java工程打包时,可能会有需求将依赖包单独输出到目录中,并且设置启动jar包的Class-Path的需求。这里记录一下。
在build.gradle 文件中 添加如下配置
plugins { id 'java' id 'application' } // 定义被引用的全部依赖包 def allJars = (configurations.runtimeClasspath) .findAll{it.isFile()} .collect { 'lib/' + it.name } .join(' ') //定义启动类 mainClassName = 'com.example.App' // 定义拷贝依赖的task 将依赖输出至lib目录 task copyDependencies(type: Copy){ from configurations.runtime into "$rootDir/lib" } // gradle jar 执行 同时也执行 copyDependencies task jar.dependsOn(copyDependencies) // 设置MANIFEST.MF Main-Class 和Class-Path jar { manifest { attributes( 'Main-Class': mainClassName, 'Class-Path': allJars + " .", ) } // 将全部的依赖库打入jar包 // into('lib') { // from configurations.runtime // } } application { mainClassName }
gradle 打包命令 gradle jar
在pom.xml中添加如下设置
<build> <plugins> <!-- 打包 设置 MANIFEST.MF 文件中 Class-Path: 依赖--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <!-- 添加依赖包路径, 路径会写在MANIFEST文件的Class-Path下 --> <addClasspath>true</addClasspath> <!-- 添加依赖前缀 --> <classpathPrefix>lib/</classpathPrefix> <!-- 设置启动函数 --> <mainClass>com.example.App</mainClass> </manifest> <manifestEntries> <!-- 自定义 MANIFEST.MC文件中其他属性 --> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> <!--将依赖输出到 target/lib 目录下--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <!-- 依赖输出target/lib目录 --> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
maven 打包命令:mvn clean package
maven 安装包到本地仓库:mvn clean install
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。