我想建立一个流程,我可以为我的webapps生成缩小和优化的JS,作为使用git将更新的代码推送到Web服务器的过程的一部分。
运行它非常简单:java -jar ./compiler.jar script.js
当然,如果我有十个项目,我不想要十个compiler.jar
s。
如果我坚持这里:/usr/local/lib/compiler.jar
我的电话看起来很愚蠢:
java -jar /usr/local/lib/compiler.jar script.js
把它放在~
更有意义,就像我对其他一切无处可去的东西一样。它只是感觉草率。
是否有一些目录,我可以粘贴我的罐子,以便我可以更容易地运行它们,而不是我必须为我想要使用的每个jar设置(符号链接)shell脚本(或者可能更好的shell命令别名)?
例如,不应该有一个系统,我把我的jar放在一个全局指定的java lib目录,之后我可以调用java closure script.js
?
编辑:我试过把它放在我在这里找到的jre/lib/ext
,但它不起作用:
$ find /usr/lib | grep jre/lib/ext
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/lib/ext
.... bunch of other jar files here
$ cp ~/compiler.jar /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/lib/ext
$ java -jar compiler.jar script.js
Error: Unable to access jarfile compiler.jar
我的回答是更多的建议,你不要重新发明轮子,这有希望将你从问题中解脱出来,你没有参与其中 - 但是,因为你已经在自己的评论中建议将jar包括在内每个项目。 :-)
我建议将jar放在每个项目中并使其自包含或更好:在每个项目中运行一个安装脚本,从远程位置获取jar。
您可以手动编写安装脚本脚本,或者更进一步使用任务运行器来创建自己的构建工具链,您可以在多个项目中重复使用它。
我们将项目结构转换为Grunt
任务(http://gruntjs.com)Grunt包含一个闭包编译器插件(以及更多插件,例如sass
)。每个项目都包含一个Grunt配置文件,该文件指定所有任务,例如test,build,您可以在给定项目上调用它。所以你必须在你的机器上安装Grunt一次,Grunt将为给定项目选择所有任务,并负责下载closure-compiler.jar并调用closure-compiler。
所以即便如此,如果你现在想的话:“我只需要封闭编译器”最终你可能需要另一个工具B
并为工具B
启动bash-scripting。我建议你花更多的时间学习,比如Grunt,并使用社区的工作。
旁注:在我们使用Grunt
之前,我使用另一个taskrunner Gradle
(http://www.gradle.org)设置了build-toolchain,这是Java
项目的流行,其原因是closure-compiler.jar本身就是一个Java项目。这非常好用,但我终于注意到Grunt比Gradle有更多基于Web项目的支持。因为我相信正确的工作正确的工具,我的结论是:使用Grunt for Javascript-Projects,Gradle for Java / JVM。
这取决于你的Linux发行版。通常,它已在包存储库中可用。
例如。对于CentOS 7,您将运行:
yum install https://extras.getpagespeed.com/release-el7-latest.rpm
yum install closure-compiler
然后只需通过closure-compiler <arguments>
调用它
如果您不使用打包它的发行版,请参阅下一个答案。
.jar
文件的系统包通常会进入/usr/share/java/
(至少在基于RedHat的系统中)。此外,手动安装或下载的软件应根据FHS标准进入/usr/local
。
从上面可以看出,如果你想让多个用户/项目可以访问它们,你可以破译/usr/local/share/java/
应该是放置手动下载的.jar
文件的适当位置。
如果直接使用java命令,则必须提供相关jar的路径。将jar放在一个地方并创建一个处理调用和jar路径的shell脚本可能更容易。
我使用了一个别名,我觉得它比在某个地方实现大致相同的shell脚本更有效。
alias closure='java -jar /opt/closure-compiler/compiler.jar'
正在使用:
closure --js i.js --js_output_file i.min.js
我也会把它放在每个项目中。这是为了使它们自成一体。这是我的代码:
cd /path/to/your/project
sudo apt-get install -y default-jre
wget "https://dl.google.com/closure-compiler/compiler-latest.tar.gz"
tar -xf compiler-latest.tar.gz
rm compiler-latest.tar.gz README.md COPYING
mv closure-compiler* closure-compiler.jar # rename for easier use