Gradle生成可独立运行(runnable)程序

无法运行的jar文件

在Java程序中,经常需要使用第三方的库(一般以jar包的形式出现)。在脚本中,可以通过下面的方式添加依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apply plugin: 'java'

repositories {
mavenCentral()
}

dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.5'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5'
}

jar {
manifest {
attributes 'Main-Class': 'com.shizhihua.example.TestLog'
}
}

按照上面生成jar文件,如果直接运行,会出现找不到依赖的问题。

生成runnable的jar文件

为了解决这个问题,可以在脚本中添加一段代码,生成胖jar文件。这样的jar文件可以直接运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apply plugin: 'java'

repositories {
mavenCentral()
}

dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.5'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5'
}

jar {
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }

manifest {
attributes 'Main-Class': 'com.shizhihua.example.TestLog'
}
}

application插件

1
2
3
4
5
6
7
8
9
10
11
12
apply plugin: 'application'

repositories {
mavenCentral()
}

dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.5'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5'
}

mainClassName = "com.shizhihua.example.TestLog"

运行gradle tasks,可以看到很多的task。其中有两个常用的新task:

1
gradle run

可以直接运行程序,看到输出结果。

1
gradle installDist

可以生成可运行的文件(实际上是响应的脚本,指定了依赖库和运行的jar文文件),其中相关的依赖库也都被拷贝到对应的libs(build\install\testLog\libs)下面。可以通过下面的命令直接运行程序:

1
build/install/testLog/bin/testLog