我可以从Docker运行Maven工件吗

时间:2018-11-08 15:02:48

标签: javascript maven docker rhino

我的目标是使用maven:latest设置一个Dockerfile,以便能够使用最新版本的org.mozilla.rhino

运行我的javascript代码
FROM maven:latest
RUN [ "mvn", "dependency:get", "-Dartifact=org.mozilla:rhino:LATEST:jar" ]
RUN [ "mvn", "exec:java" "-Dexec.mainClass='org.mozilla.javascript.tools.shell.Main'" "-Dexec.args='src/index.js'"]

我是否需要pom.xml来做到这一点,如果我这样做 由于我的项目只有javascript文件,因此pom.xml应该包含什么?

PS:我以前没有使用过Maven的经验

1 个答案:

答案 0 :(得分:1)

好吧,正如您希望的那样,您的项目确实不需要pom.xml。我不知道您是否需要此功能完全可移植,但这是我根据maven:latest模拟的内容。这是通过利用以下事实来完成的:下载的犀牛jar文件包含一个MANIFEST.MF文件,该文件告诉java命令如何执行它。

rhino-1.7.10.jar的内容:/META-INF/MANIFEST.MF

Manifest-Version: 1.0
Main-Class: org.mozilla.javascript.tools.shell.Main
Implementation-Version: 1.7.10
Implementation-Title: Mozilla Rhino
Implementation-Vendor: Mozilla Foundation
Implementation-URL: http://www.mozilla.org/rhino
Built-Date: 2018-04-09
Built-Time: 20:03:34

所以:

index.js

print("Hello world");

命令行

$ mvn dependency:get -Dartifact=org.mozilla:rhino:LATEST:jar # as you have currently
... # maven output snipped
$ find .m2 -name rhino*.jar -exec java -jar {} index.js \;
Hello world!

Dockerfile (未经测试)

FROM maven:latest
# Missing here is you copying your javascript into the image
RUN [ "mvn", "dependency:get", "-Dartifact=org.mozilla:rhino:LATEST:jar" ]
RUN [ "find", "/root/.m2", "-name", "rhino*.jar", "-exec", "java", "-jar", "{}", "src/index.js", "\;" ]

编辑:

我还应该注意,.m2用户子目录包含一个存储库,其中存储了maven下载的所有工件。 maven:latest Dockerfile似乎将其设置在/ root /下。