Java 在JAR中为命令行项目注入带有Maven的存根脚本
使用“本机”ApacheMaven插件,在jar文件的开头插入脚本以使jar成为可执行文件,更简单的方法是什么 实际上,任何将构建的jar文件作为常规文件进行“编辑”的方法都可以将其与另一个文件连接起来。如下面的shellJava 在JAR中为命令行项目注入带有Maven的存根脚本,java,maven,Java,Maven,使用“本机”ApacheMaven插件,在jar文件的开头插入脚本以使jar成为可执行文件,更简单的方法是什么 实际上,任何将构建的jar文件作为常规文件进行“编辑”的方法都可以将其与另一个文件连接起来。如下面的shellcat示例: $ cat ${projectRoot}/src/main/stubs/runstub.sh target/${builtJarPath} > target/${builtJarPathWithoutExtention}-autorun.jar $ chmo
cat
示例:
$ cat ${projectRoot}/src/main/stubs/runstub.sh target/${builtJarPath} > target/${builtJarPathWithoutExtention}-autorun.jar
$ chmod +x target/${builtJarPathWithoutExtention}-autorun.jar
如果您想知道在jar文件开头插入shell脚本的原因,请查看internet上关于“将jar文件转换为Linux可执行文件”的信息,例如:
execmaven插件
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<executions>
<execution>
<id>Inject stub</id>
<phase>install</phase> <!-- Select a phase that is after package generation -->
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${basedir}/scripts/inject-stub.sh</executable>
</configuration>
</execution>
</executions>
</plugin>
execmaven插件
org.codehaus.mojo
注入存根
安装
执行官
${basedir}/scripts/inject-stub.sh
在jar中使用shell脚本不会使其成为可执行文件。可执行文件首先需要MANIFEST.MF文件中mainClass中的一个正确条目,这使它能够启动jar,如java-jar jarfile.jar
..@khmarbaise:MANIFEST文件不重要,脚本将启动JVM,项目所需的参数是否有任何MANIFEST文件。如果脚本不依赖清单文件,则清单文件不是必需的。因此,如果您向其中注入适当的脚本,它将是可执行的。我们更应该关心依赖任何脚本“运行程序”的缺点,例如:sh
、bash
、zsh
,甚至python
。。。在特定的操作系统中。我知道您不会被迫使用MANIFEST.MF等。如果考虑到操作系统的独立性,shell脚本是没有意义的。我知道您可以通过脚本启动jvm,也可以不通过脚本启动jvm。。。但是如何开始脚本呢?或者如何启动脚本,因为如果脚本在jar中,您就无法启动它。。。你可以通过Graal VM创建一个可执行文件,它可以编译成本地可执行文件,但我不知道你有什么样的应用程序。。。通常,您为linux创建两个不同的脚本.cmd
(windows)和.sh
,并创建一个包含所需一切的zip/tar.gz存档…(JVM不包括在内)您可以通过JLink(JDK9+)创建一个打包的JVM,并以同样的方式分发整个JRE,包括您的应用程序。。。但是你必须模块化。。。。