gradle对java插件的扩展_使用gradle构建Java项目

Gradle和许多插件在一起运行。插件是Gradle的扩展,它以某种方式配置我们的项目,最典型的做法是添加一些预先配置好的用于做某些有用的事情的task。Gradle有很多插件,本例将用到的插件就是Java插件。

Java项目介绍

大部分Java项目的构建都十分相似:

编译Java源码文件。

运行一些单元测试并且创建一个JAR文件来包含你的class文件。

Groovy通过使用Gradle的Java插件来自动完成上述两个步聚。这个插件会添加许多task到项目中,这些task会编译和测试我们的Java源码,并且把它打包进JAR文件中。

Gradle Java插件介绍

Java插件是基于约定的。就是说在项目的许多方面该插件都定义了默认值,如Java源码放置路径等。如果项目遵守约定,那么我们的构建脚本中通常就不需要做太多的事情就可以完成一个项目的构建。对Java项目的支持是以一个插件的形式来实现的,如果我们不想遵守Java插件的约定,可以在构建Java项目时不使用这个插件。

Gradle Java插件有以下约定:

存放项目源码:src/main/java

存放测试源码:src/test/java

存放资源文件:src/main/resources

在src/test/resources目录下的任何文件都会被添加到classpath中用于运行测试

所有的输出文件都被创建在build目录里,其中JAR文件在build/libs目录里

列出Gradle Java插件在项目中添加的task:

~/Desktop/gr$ gradle task

> Task :tasks

------------------------------------------------------------

Tasks runnable from root project

------------------------------------------------------------

Build tasks

-----------

assemble - Assembles the outputs of this project.

build - Assembles and tests this project.

buildDependents - Assembles and tests this project and all projects that depend on it.

buildNeeded - Assembles and tests this project and all projects it depends on.

classes - Assembles main classes.

clean - Deletes the build directory.

jar - Assembles a jar archive containing the main classes.

testClasses - Assembles test classes.

Build Setup tasks

-----------------

init - Initializes a new Gradle build.

wrapper - Generates Gradle wrapper files.

Documentation tasks

-------------------

javadoc - Generates Javadoc API documentation for the main source code.

Help tasks

----------

buildEnvironment - Displays all buildscript dependencies declared in root project 'gr'.

components - Displays the components produced by root project 'gr'. [incubating]

dependencies - Displays all dependencies declared in root project 'gr'.

dependencyInsight - Displays the insight into a specific dependency in root project 'gr'.

dependentComponents - Displays the dependent components of components in root project 'gr'. [incubating]

help - Displays a help message.

model - Displays the configuration model of root project 'gr'. [incubating]

projects - Displays the sub-projects of root project 'gr'.

properties - Displays the properties of root project 'gr'.

tasks - Displays the tasks runnable from root project 'gr'.

Verification tasks

------------------

check - Runs all checks.

test - Runs the unit tests.

Rules

-----

Pattern: clean: Cleans the output files of a task.

Pattern: build: Assembles the artifacts of a configuration.

Pattern: upload: Assembles and uploads the artifacts belonging to a configuration.

To see all tasks and more detail, run gradle tasks --all

To see more detail about a task, run gradle help --task

BUILD SUCCESSFUL in 2s

1 actionable task: 1 executed1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

构建Java项目的过程

(1)使用java插件,只需要在build.gradle文件中添加以下内容,这将会应用Java插件到你的项目中,它会添加一些task到我们的项目中。

apply plugin: 'java'1

(2)按照Java插件的约定,创建各个目录

~/Desktop/gr$ mkdir -p src/main/java

~/Desktop/gr$ mkdir -p src/test/java

~/Desktop/gr$ mkdir -p src/main/resources

~/Desktop/gr$ ls -R

.:

build.gradle src

./src:

main test

./src/main:

java resources

./src/main/java:

./src/main/resources:

./src/test:

java

./src/test/java:

~/Desktop/gr$1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

(3)在各个目录里放入相应的文件,为了方便演示,我们只加项目源码文件:

/*建包名*/

~/Desktop/gr/src/main/java$ mkdir -p com/wong/ai

~/Desktop/gr$ touch src/main/java/com/wong/ai/Hello.java

~/Desktop/gr$ vim src/main/java/com/wong/ai/Hello.java

~/Desktop/gr$ cat src/main/java/com/wong/ai/Hello.java

package com.wong.ai;

public class Hello{

public static void main(String[] args){

System.out.println("Hello World");

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

(4)构建项目

~/Desktop/gr$ gradle build

BUILD SUCCESSFUL in 3s

2 actionable tasks: 2 executed1

2

3

4

Java插件添加了许多task到我们的项目中。然而,只有少量的task是你需要在项目中使用的。最常用的task是build,它可以构建完整的项目。当你运行gradle build命时,Gradle将会编译和测试我们的代码,并且创建一个JAR文件来包含我们的主要class和资源文件。

(5)查看编译后的结果

所有的输出文件都被创建在build目录里,其中JAR文件在build/libs目录里。

~/Desktop/gr$ ls -R build

build:

classes generated libs tmp

build/classes:

java

build/classes/java:

main

build/classes/java/main:

com

build/classes/java/main/com:

wong

build/classes/java/main/com/wong:

ai

build/classes/java/main/com/wong/ai:

Hello.class

build/generated:

sources

build/generated/sources:

annotationProcessor

build/generated/sources/annotationProcessor:

java

build/generated/sources/annotationProcessor/java:

main

build/generated/sources/annotationProcessor/java/main:

build/libs:

gr.jar

build/tmp:

compileJava jar

build/tmp/compileJava:

build/tmp/jar:

MANIFEST.MF1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

(6)运行gr.jar文件

~/Desktop/gr/build/libs$ java -jar gr.jar

no main manifest attribute, in gr.jar1

2

正常情况下,java打包成jar包需要在MANIFEST.MF中指定Main-Class项以便运行java -jar XXX.jar时找到对应的主类。因为-jar的含义就是后面跟的jar包是有main class可独立运行,所以需要在打包成jar包时指定这个类。这个问题的解决办法:

运行时指定运行的主类,如:

格式:java -cp jar文件 主类路径

~/Desktop/gr/build/libs$ java -cp gr.jar com.wong.ai.Hello

Hello World1

2

在MANIFEST.MF中指定Main-Class项。

(1)将gr.jar改成gr.zip,然后解压出来。或者使用jar命令解压,格式:

jar -xvf jar文件1

对gr.jar文件进行解压,得com、META-INF两个目录:

~/Desktop/gr/build/libs$ jar -xvf gr.jar

created: com/

created: com/wong/

created: com/wong/ai/

inflated: com/wong/ai/Hello.class

created: META-INF/

inflated: META-INF/MANIFEST.MF

~/Desktop/gr/build/libs$ ls

com gr.jar META-INF

~/Desktop/gr/build/libs$ ls -R META-INF

META-INF:

MANIFEST.MF1

2

3

4

5

6

7

8

9

10

11

12

对META-INF/MANIFEST.MF文件进行配置,添加Main-Class项:

Manifest-Version: 1.0

Main-Class: com.wong.ai.Hello1

2

将修改好的com、META-INF打成jar包(jar包也是压缩包),有以下几种方式:

1、先将com、META-INF压缩成.zip包,再将.zip改成.jar即可。

2、用jar命令打包:

/*删除掉所有生成的jar包*/

~/Desktop/gr/build/libs$ rm -f *.jar

/*将com、META-INF目录打成jar包,参数-M是不生成MANIFEST.MF文件,否则改好的文件会被覆盖掉*/

~/Desktop/gr/build/libs$ jar -cfM gr.jar com META-INF

~/Desktop/gr/build/libs$ ls

com gr.jar META-INF

/*成功运行*/

~/Desktop/gr/build/libs$ java -jar gr.jar

Hello World1

2

3

4

5

6

7

8

9

10

(3)使用jar命令,向jar添加MANIFEST.MF文件,在文件中加入Main-Class项

新建一个文件MANIFEST.MF,内容如下:

Manifest-Version: 1.0

Main-Class: com.wong.ai.Hello1

2

使用jar命令打包

/*将.class类目录打进jar包*/

~/Desktop/gr/build/libs$ jar -cfM gr.jar com

/*向jar添加MANIFEST.MF文件*/

~/Desktop/gr/build/libs$ jar -umf MANIFEST.MF gr.jar

~/Desktop/gr/build/libs$ java -jar gr.jar

Hello World1

2

3

4

5

6

(7)补充

如果我们的jar不需要主类,那么gradle build编译出来的包,就可以直接拿到其他项目里去用了。

谢谢阅读

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/103519535

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值