3

我想建立一个流程,在其中我可以为我的 webapps 生成缩小和优化的 JS,作为使用 git 将更新的代码推送到 web 服务器的过程的一部分。

运行它非常简单:java -jar ./compiler.jar script.js

当然,如果我有十个项目,我不想要十个compiler.jar

如果我把它放在这里:/usr/local/lib/compiler.jar我的电话看起来很愚蠢:

java -jar /usr/local/lib/compiler.jar script.js

~像我对其他没有地方可去的东西一样,把它扔进去会更有意义。只是感觉很草率。

是否有一些目录可以将我的 jar 放入其中以便我可以更轻松地运行它们,而不必为我想使用的每个 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
4

5 回答 5

1

我的回答更多的是建议您不要重新发明轮子,并且希望可以使您免于遇到问题,但您没有遇到问题-但是,因为您已经在自己的评论中建议将罐子包含在其中可能会很好每个项目。:-)

我建议将 jar 放入每个项目中并使其独立或更好:在每个项目中运行一个设置脚本,该脚本从远程位置获取 jar。

您可以手动编写设置脚本,或者更进一步并使用任务运行器来创建您自己的构建工具链,您可以在多个项目中重复使用它。

我们将项目结构转换为Grunt任务 ( http://gruntjs.com ) Grunt 包含一个闭包编译器插件(以及更多插件,例如sass)。每个项目都包含一个 Grunt 配置文件,它指定所有任务,例如测试、构建,您可以在给定项目上调用这些任务。所以你必须在你的机器上安装一次 Grunt,Grunt 会为一个给定的项目挑选你的所有任务,并会负责下载closure-compiler.jar 并调用closure-compiler。

因此,即使您现在可能会想:“我只需要闭包编译器”,最终您可能需要另一个工具B并开始为 tool 编写 bash-scripting B。我建议你投入更多的时间在学习上,例如 Grunt,并利用社区的工作。

附注:在我们使用之前,我使用另一个任务运行程序(http://www.gradle.orgGrunt )设置了构建工具链,这在项目中很受欢迎,原因是closure-compiler.jar 本身就是一个Java 项目。这工作得非常好,但我终于注意到对 Grunt 的基于 Web 项目的支持比对 Gradle 的支持更多。因为我相信正确的工具能胜任正确的工作,所以我的结论是:将 Grunt 用于 Javascript 项目,将 Gradle 用于 Java/JVM。GradleJava

于 2013-08-03T11:58:17.410 回答
1

我也会把它放在每一个项目中。这是为了让它们自成一体。这是我这样做的代码:

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
于 2018-06-14T20:14:07.737 回答
1

在 Linux 上设置 Closure Compiler 的好方法是什么?

这取决于您的 Linux 发行版。通常,它已经在包存储库中可用。

例如对于 CentOS 7,你会运行:

yum install https://extras.getpagespeed.com/release-el7-latest.rpm
yum install closure-compiler

然后只需通过调用它closure-compiler <arguments>

如果您不使用打包它的发行版,请参阅下一个答案。

或者,Java .jar 应该在 Linux 上的哪个位置存在?

文件的系统包.jar通常会进入/usr/share/java/(至少在基于 RedHat 的系统中是这样)。此外,手动安装或下载的软件应/usr/local符合 FHS 标准。

从上面可以看出,如果您希望多个用户/项目可以访问手动下载的文件,那么该/usr/local/share/java/位置应该是放置手动下载文件的合适位置。.jar

于 2019-03-16T07:43:32.197 回答
0

如果您直接使用 java 命令,则必须提供相关 jar 的路径。将 jar 放在一个地方并创建一个处理调用和 jar 路径的 shell 脚本可能更容易。

于 2013-08-03T04:18:30.907 回答
0

我使用了一个别名,我认为它比让一个 shell 脚本坐在某个地方实现大致相同的事情要高效得多。

alias closure='java -jar /opt/closure-compiler/compiler.jar'

正在使用:

closure --js i.js --js_output_file i.min.js
于 2014-02-19T18:55:51.783 回答