我越来越沮丧了。我在互联网上找不到一个单一的,有凝聚力的答案来解决我的问题。虽然有很多文档,但没有什么能把所有这些都结合在一起(我可以找到)。
我只需要有人告诉我:
尽可能简单。
我强烈推荐Gradle;这是非常简单的设置(虽然我也挣扎时,学习它)。我在GitHub中添加了结果项目。
让我们从零开始创建一个没有IDE的项目结构。我想您已经设置了$java_home
。
>
下载Gradle并将其放入$path
编辑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使用的默认目录结构(我们可以更改它,但让我们使用默认值):
这是为了创建源代码dir:
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
)。注意,它已经有了我们的静态main
方法:
package org.gr8ex
class Hello {
def getWorld() {
"Hello, World!"
}
static main(args) {
println new Hello().world
}
}
再次测试(使用gradle Test
)并断言我们得到消息build successed
:
$ 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了。
有几种方法可以实现这一点(比如影子插件)。我将坚持“法塔尔”的方法。
>
让我们在构建中添加
[5]: fatjar
指令。gradle
task fatjar(type: Jar) {
manifest {
attributes 'Main-Class': 'org.gr8ex.Hello'
}
from {
configurations
.runtime
.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}
包装:
gradle fatjar
$ java -jar build/libs/gr8ex.jar
Hello, World!
利润!您可以使用intellij和(我相信)Eclipse导入这个项目。
[1]:Gradle创建一些基本结构,并添加包装器脚本,以便在需要时无需Gradle即可执行。
[2]:这里我们告诉gradle这个项目将使用groovy
[5]:如果您只使用jar{}
指令,就像下面的答案一样,您将得到一个非常薄的jar,其中将缺少groovy libs。这个“Fatjar”把你的libs装进罐子里。您可能需要根据您的用例稍微调整一下。
我有一个mvn项目,它包含对apache Commons-Lang3的依赖。我设法为这个jar文件生成了一个manifest.mf,它通过我的远程服务器上的java-jar.jar启动。然而,它不包括任何依赖项,我不知道为什么。 您可以看到,它正确地将依赖关系解析为commons-lang并将其放入清单中。但实际文件不见了。 有人知道为什么吗?
我有一个用maven创建的Selenium TestNG项目`` 此项目没有主类 我的要求:现在我想将这个项目打包到可执行的jar中,或者是否有任何选项来生成一个可执行文件,这样我就可以使用批处理文件来计划运行。 为此,我运行了“mvn package”命令,并在目标文件夹中生成了jar文件。现在,当我尝试以java-jar myproj-0.0.1-SNAPSHOT的形式运行它时。我得到的消息是
我在htmlunitdriver.java文件中做了一个补丁,如下文所述:使用WebDriver(HtmlUnit,Ruby绑定)时是否可能忽略JavaScript异常 我已经学习了关于selenium build wiki和自述文件中的说明,以及这里给出的技巧:构建selenium服务器项目 但是,我没有一个像selenium-server-standalone-2.25.0.jar这样的jar
提前感谢你的所有帮助。
问题内容: 我正在尝试从命令行构建一个可执行jar(我不想使用ant或OneJar)。这是我的file.jar的内容: META-INF / MANIFEST.MF的内容: ped.jar确实包含Main-Class 但是当我尝试执行file.jar时,出现错误: 所以,我在这里错过了一些东西。我不能仅通过包含依赖项来打包可执行jar吗? 谢谢你的帮助 皮埃尔 问题答案: 如前所述,属性中的jar
我正在尝试建立基于Maven的应用程序的jar文件。所以我不需要将外部jar库包含到我的构建中。我需要我的应用程序在运行时从本地maven存储库或从本地文件夹提供这种外部依赖,这些将包含这些外部库。我为此依赖项配置pom文件,如下所示: 并尝试使用前缀运行这个jar。我正在用这个答案。