【问题标题】:How to pass parameters to JAR in Jenkins job through execute shell如何通过执行shell将参数传递给Jenkins作业中的JAR
【发布时间】:2017-07-16 03:07:24
【问题描述】:
  1. 我是否需要在一个入口点类中有主类?
  2. 我尝试添加主类,但是当我尝试传递它时说主类无法加载或找不到。

这是我使用的命令:

jar -xvf jarname.jar 
java -cp /path/filename.class $JOB_URL $USER $PASSWORD

路径名是入口点所在的文件名,具有main() 方法。

【问题讨论】:

    标签: java jenkins


    【解决方案1】:

    1) 我需要在一个入口点类中有主类吗?

    是的。并且传递参数不需要解压缩 jar 存档:请参阅“How do I pass parameters to a jar file at the time of execution?

    java -jar jarname.jar  param1 param2
    

    但这需要MANIFEST file inside the jar which reference the main class

    Main-Class: MyPackage.MyClass
    

    或者你可以使用 -he 'jar e' 选项(如果你的 jar 没有Manifest.txt 文件):

    如果入口点类名在包中,它可以使用'.' (点)字符作为分隔符。
    例如,如果 Main.class 位于名为 foo 的包中,则可以通过以下方式指定入口点:

    jar cfe Main.jar foo.Main foo/Main.class
    

    在这两种情况下,您都不必解压缩 jar。

    【讨论】:

    • @RockyHai 是的,如docs.oracle.com/javase/tutorial/deployment/jar/appman.html 中所述。但是您也可以在不假设存在Manifest 的情况下使用jar cfe 命令测试您的jar,如答案的最后部分所述。
    • 目前我没有添加 Manifest.mf 所以我可以使用 jar cfe jarname.jar path.entryclass $param.
    • @RockyHai 是的,就是这个想法。如果您没有Manifest,您将使用jar cfe jarname.jar path.entryclass path/entryclass.class $param(除了类名本身之外,不要忘记.class 路径名)
    • 当我通过 Jenkins 传递参数并构建它时,jenkins 构建失败 param:no such file or directory。现在主要类问题已解决。你能帮我吗?
    • @RockyHai 是的,但最好问一个新问题,使用确切的 Jenkins 版本(以及 java 版本和 OS 版本),以及工作类型(freestyle?maven?)使用的,以及作业配置中使用的确切命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2018-05-03
    • 1970-01-01
    • 2021-01-21
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多