当前位置: 首页 > 知识库问答 >
问题:

如何通过JAR建立一个带有主类可执行的vanilla groovy项目?

宋弘壮
2023-03-14

我越来越沮丧了。我在互联网上找不到一个单一的,有凝聚力的答案来解决我的问题。虽然有很多文档,但没有什么能把所有这些都结合在一起(我可以找到)。

我只需要有人告诉我:

    null

尽可能简单。

共有1个答案

柳英豪
2023-03-14

我强烈推荐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了。

    有几种方法可以实现这一点(比如影子插件)。我将坚持“法塔尔”的方法。

    >

  • 让我们在构建中添加fatjar指令。gradle[5]:

    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。我正在用这个答案。