- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我感到非常沮丧。我无法在 Internet 上的任何地方为我的问题找到一个单一的、有凝聚力的答案。很多文档,但没有任何东西可以将它们组合在一起(我能找到)。
我只需要有人告诉我:
java -jar <groovy-project>.jar
执行的 jar 文件打印出“hello world”尽可能简单。
最佳答案
我强烈推荐 Gradle;它设置起来非常简单(尽管我在学习它时也很挣扎)。我在 github 中添加了生成的项目.
让我们在没有 IDE 的情况下从零开始创建一个项目结构。我想你已经有了 $JAVA_HOME
set up .
Download Gradle并将其放入您的 $PATH
创建你的目录项目(我创建了/tmp/gr8ex
)
切换到它并运行 gradle init
[1]
编辑 build.gradle
创建的文件并添加以下行:
plugins { // [2]
id 'groovy'
}
repositories { mavenCentral() } // [3]
dependencies { // [4]
testCompile 'org.codehaus.groovy:groovy-all:2.4.8'
compile 'org.codehaus.groovy:groovy-all:2.4.8'
testCompile 'junit:junit:4.12'
}
现在是源文件;我们需要创建 gradle 使用的默认目录结构(我们可以更改它,但让我们使用默认值):
这是创建源代码目录:
mkdir -p src/main/groovy
和测试源文件夹:
mkdir -p src/test/groovy
最终结果应该是这样的:
gr8ex
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── groovy
└── test
└── groovy
让我们添加一个测试包:
mkdir -p src/test/groovy/org/gr8ex
还有一个测试。我正在使用 gedit src/test/groovy/org/gr8ex/HelloTest.groovy
:
package org.gr8ex
class HelloTest extends GroovyTestCase {
void 'test Hello should return "Hello, World!"' () {
assert new Hello().world == "Hello, World!"
}
}
让我们执行测试并检查它是否失败:
gradle test
是的,它失败了:
/tmp/gr8ex/src/test/groovy/org/gr8ex/HelloTest.groovy: 5: unable to resolve class Hello
@ line 5, column 12.
assert new Hello().world == "Hello, World!"
^
1 error
:compileTestGroovy FAILED
让我们添加源文件夹
mkdir -p src/main/groovy/org/gr8ex
和一个源文件(我使用了gedit src/main/groovy/org/gr8ex/Hello.groovy
)。注意它已经有了我们的 static main
方法:
package org.gr8ex
class Hello {
def getWorld() {
"Hello, World!"
}
static main(args) {
println new Hello().world
}
}
再次测试(使用 gradle test
)并断言我们收到消息 BUILD SUCCESSFUL
:
$ gradle test
:compileJava UP-TO-DATE
:compileGroovy
:processResources UP-TO-DATE
:classes
:compileTestJava UP-TO-DATE
:compileTestGroovy
:processTestResources UP-TO-DATE
:testClasses
:test
BUILD SUCCESSFUL
Total time: 5.52 secs
完成。是时候创建我们的应用程序 jar 了。
jar
可执行文件有几种方法可以实现(例如 shadow plugin )。我要坚持使用 "fatjar"方法。
让我们在 build.gradle
[5] 中添加一个 fatjar
指令:
task fatjar(type: Jar) {
manifest {
attributes 'Main-Class': 'org.gr8ex.Hello'
}
from {
configurations
.runtime
.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}
打包:
gradle fatjar
生成的 jar
将在 builds/libs/gr8ex.jar
中。让我们执行它:
$ java -jar build/libs/gr8ex.jar
Hello, World!
利润!您可以使用 intellij 和(我相信)eclipse 导入该项目。
[1]:Gradle 创建一些基本结构并添加包装器脚本,因此如果需要,它可以在没有 Gradle 的情况下执行。
[2]: 这里我们告诉gradle这个项目将使用groovy
[3]:我们告诉 gradle 使用 mavencentral
存储库。 JCenter 也很受欢迎。
[4]: 这里我们告诉gradle这个项目需要在编译和测试阶段使用groovy-all lib
[5]:如果您只是坚持使用 jar {}
指令,例如 this answer ,您将以一个非常薄的 jar 结束,它将缺少 groovy 库。这个“fatjar”将你的库打包到 jar 里。您可能需要根据您的用例对其进行一些调整。
关于java - 如何通过 jar 设置主类可执行文件的 vanilla groovy 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793370/
我有一些库脚本:lib1.groovy: def a(){ } lib2.groovy: def b(){ } lib3.groovy: def c(){ } 并想在其他脚本中使用它们:配置文件: a
我有下面的 Groovy 脚本,我需要将它放在集中式 Groovy 库中,然后从 Ready API 项目中的任何脚本访问 Groovy 中提到的类 路径 : D:\GroovyLib\com\Lin
看完后this link ,我想尝试Groovy++,但我有一个担心; Groovy 的所有语法在 Groovy++ 中都有效吗? 例如,我可以在 Groovy 中执行此操作: def list =
我在 Spring-boot 应用程序中混合了 Groovy 和 Java。休息 Controller 和数据访问是用 Groovy 编写的。配置主要使用Java。 根据 logback 文档,如果类
我已阅读how to simply import a groovy file in another groovy script 我想在一个 groovy 文件中定义常用函数,并从其他 groovy 文
你知道,我也知道,只要只有一个是公共(public)的,就可以用 Java 实现。但是,在 Groovy 中可以这样做吗?如果是的话,在什么条件下? 最佳答案 Java 和 Groovy 之间在可以放
~/groovy % tree . ├── lib │ ├── GTemplate.class │ └── GTemplate.groovy └── Simple.groovy class
给定一个具有属性和构造函数的对象,我希望将构造函数参数复制到属性中,然后在构造函数中做一些额外的工作。 import groovy.transform.TupleConstructor @TupleC
我会提前道歉,我是 groovy 的新手。我的问题是我有 3 个执行不同功能的 groovy 脚本,我需要从我的主 groovy 脚本中调用它们,使用脚本 1 的输出作为脚本 2 的输入和脚本 2 的
我想在静态闭包中存储一些属性,然后在方法调用期间访问它们: class Person { static someMap = { key1: "value1", key2: "value2" } }
Groovy 是否有安全范围运算符? 例如,如果我有, [1,2,3][0..10] Groovy 会抛出一个 java.lang.IndexOutOfBoundsException: 有没有索引安全
在 Groovy 中使用 Maps/JsonBuilder 处理一些翻译/映射功能。 是否有可能(无需在 map 文字创建之外创建额外的代码).. 有条件地包含/排除某些键/值对?一些事情沿着以下路线
不知道我是否正确询问,但是我有类似以下内容: def x = 1 if (x == 1) { def answer = "yes" } println answer 我收到错误
我不明白 groovy 打字是如何工作的。在 wikipedia据说它具有很强的类型,但我可以在解释器上完美地做到这一点: 1 + '1' ==> 11 所以也许我很困惑,我不明白弱类型是什么,但我想
我对函数式编程概念非常陌生,正在观看 Neil Ford 在 youtube 中的演讲。 .在那里他谈到了一个计数器来演示一段代码而不使用全局状态(在 20:04)。来自 Java 世界,我很难理解这
我有两个问题。 我执行以下代码来查找 $ 的 ASCII 值: def a = "\$" def b = (int)a println b //prints 36 好吧,我对答案很满意。但是当我尝试像
只是想知道 时髦 像这样与默认值进行值匹配的方法? if(params.max != 10 && params.max != 20 && params.max != 30){ params.m
我最近正在读《行动中的格鲁夫》。在第7章中,它介绍了*。运算符(operator) 。当我运行有关此运算符的代码时,我会遇到一些错误。 class Invoice {
是否有易于阅读的方法或一些聪明的方法来制作 combination Groovy 中的元素?我知道 Iterable#combinations或 GroovyCollections#combinati
最近我下载了 Groovy-2.3.6 并尝试在 Linux 系统上安装它。我按照 http://groovy-lang.org/install.html 的说明进行操作.我设置了我的 GROOVY_
我是一名优秀的程序员,十分优秀!