分类 Java 下的文章

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具... ...当前其支持的语言限于Java、Groovy、Kotlin和Scala...

嗯,没错,这就是我把它归类到 编程语言/Java 而不是 软件/编译 的原因。

相比于maven,Eclipse对于gradle的可视化操作的友好程度大大下降。只提供最基础的项目创建、任务运行(修改了配置文件之后居然还不会自动更新任务)和配置文件高亮功能。甚至连依赖配置都只能自己动手修改文件完成。虽然不难,但是不直观啊,对新手入门也不友好。反正我是搜了好久教程,七拼八凑弄出来的。

简要列出三大运行项目的方法[1]

  1. 暴力寻找主类运行。由于gradle只是一个项目构建工具(和cmake有点像?),并不负责对被处理对象进行运行操作,故默认状态下我们只能得到编译好的class文件。故最原始粗暴的方法便是手动为Eclipse指定一个运行时的主类。而当Eclipse在检测到所有项目文件均已编译好时,会直接运行项目,间接达到了目的:因为依赖配置使用的是gradle,直接使用Eclipse调用javac编译的话可能会出现缺少包的错误。

  2. 加载application插件。gradle可以通过插件扩展其功能。application插件能够为gradle添加一个Application Tasks/run的任务,通过该任务可以直接运行项目。 在build.gradle文件的最外层里添加

    apply plugin 'application'
    mainClassName = 'your.main.class'

    your.main.class换成项目的入口类,会自动调用其main方法运行项目。 没有mainClassName的话,buildrun任务都会出错,因为application插件将不知道你需要将哪个包作为应用程序运行。

  3. 这个更暴力了。。编译成jar然后自己去命令行运行(捂脸)
    jar {
    manifest.attributes 'Main-Class': 'com.mycompany.Main'
    from configuration.compile.collect { zipTree it}
    }

    然后gradle/gradlew build生成jar包,然后用对应的java命令执行(通常是java -jar file.jar)即可。

添加依赖的方法:

  1. 最简单粗暴(对应maven):

    <scope> '<group>:<artifact>:<version>'
    =======================================================
    <scope> IN compile, test, testCompile, runtime, etc.

    scope与maven中的部分对应。 例:runtime 'mysql:mysql-connector-java' << 最后一个版本号可以省略,应该是默认取最新版本吧?

  2. 优雅一点:

    <scope> group: '...', name: '...', version: '...'
    =======================================================
    <scope> IN compile, test, testCompile, runtime, etc.

    例:runtime group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'

  3. 本地文件:
    <scope> fileTree(dir: 'lib', includes: ['mysql-connector-java-8.0.16.jar'])
    =======================================================
    <scope> IN compile, test, testCompile, runtime, etc.

    该写法会让gradle到项目根目录下的lib文件夹里寻找mysql-connector-java-8.0.16.jar

参考: [1] https://www.cnblogs.com/yongheng20/p/6161160.html

在写项目的时候,先写了个爬虫,用了官方的json库,写完运行,没问题。 之后打算把爬虫的信息处理之后用REST写成api,然后就选择了Springboot。 把项目内的源代码原封不动地复制过去,然后,报错了???

之后还是在神奇的stackoverflow上找到了原因:在spring-boot-starter-test组件里,调用了非官方的android-json库。 https://stackoverflow.com/questions/52980064/maven-spring-boot-found-multiple-occurrences-of-org-json-jsonobject-on-the-cl

而这两者之间的差距在于,我所使用的官方库在解析错误时报出的是非检查性异常RuntimeException,也就是不影响代码语法的错误,运行时碰到就直接输出报错信息,停止这一过程了。而android-json库报出的是检查性异常Exception,用户必须在编写代码时就考虑该问题的解决,即try-catch

解决方案在上文链接里也有提到,在pom.xml里把该组建排除依赖即可。在eclipse里可通过图形界面简单操作。

最后再来小声bb一段:怎么又是咕果家的东西……

真的是只有商业公司才上心吗,firefox又给自己搞事情……

不想用chrome啊……

Thread类作为对象,其本身具有的功能是顺序执行指定功能(run()方法,即普通的函数功能)和异步执行指定功能(start()方法,在不阻塞后续代码执行的同时,执行自身的run()方法,即多线程特性,开启新线程来执行该方法)。对应的接口为Runnable。构造函数有如下形式:

Thread()
Allocates a new Thread object.
Thread(Runnable target)
Allocates a new Thread object.
Thread(String name)
Allocates a new Thread object.
Thread(ThreadGroup group, Runnable target)
Allocates a new Thread object.
Thread(ThreadGroup group, String name)
Allocates a new Thread object.
Thread(Runnable target, String name)
Allocates a new Thread object.
Thread(ThreadGroup group, Runnable target, String name)
Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group.
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group, and has the specified stack size.

- 阅读剩余部分 -