290 lines
7.0 KiB
Plaintext
290 lines
7.0 KiB
Plaintext
|
/*
|
||
|
* Copyright 2009 Google Inc.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// Contents
|
||
|
//
|
||
|
|
||
|
The Closure Compiler performs checking, instrumentation, and
|
||
|
optimizations on JavaScript code. The purpose of this README is to
|
||
|
explain how to build and run the Closure Compiler.
|
||
|
|
||
|
The Closure Compiler requires Java 6 or higher.
|
||
|
http://www.java.com/
|
||
|
|
||
|
|
||
|
//
|
||
|
// Building The Closure Compiler
|
||
|
//
|
||
|
|
||
|
There are three ways to get a Closure Compiler executable.
|
||
|
|
||
|
1) Use one we built for you.
|
||
|
|
||
|
Pre-built Closure binaries can be found at
|
||
|
http://code.google.com/p/closure-compiler/downloads/list
|
||
|
|
||
|
|
||
|
2) Check out the source and build it with Apache Ant.
|
||
|
|
||
|
First, check out the full source tree of the Closure Compiler. There
|
||
|
are instructions on how to do this at the project site.
|
||
|
http://code.google.com/p/closure-compiler/source/checkout
|
||
|
|
||
|
Apache Ant is a cross-platform build tool.
|
||
|
http://ant.apache.org/
|
||
|
|
||
|
At the root of the source tree, there is an Ant file named
|
||
|
build.xml. To use it, navigate to the same directory and type the
|
||
|
command
|
||
|
|
||
|
ant jar
|
||
|
|
||
|
This will produce a jar file called "build/compiler.jar".
|
||
|
|
||
|
|
||
|
3) Check out the source and build it with Eclipse.
|
||
|
|
||
|
Eclipse is a cross-platform IDE.
|
||
|
http://www.eclipse.org/
|
||
|
|
||
|
Under Eclipse's File menu, click "New > Project ..." and create a
|
||
|
"Java Project." You will see an options screen. Give the project a
|
||
|
name, select "Create project from existing source," and choose the
|
||
|
root of the checked-out source tree as the existing directory. Verify
|
||
|
that you are using JRE version 6 or higher.
|
||
|
|
||
|
Eclipse can use the build.xml file to discover rules. When you
|
||
|
navigate to the build.xml file, you will see all the build rules in
|
||
|
the "Outline" pane. Run the "jar" rule to build the compiler in
|
||
|
build/compiler.jar.
|
||
|
|
||
|
|
||
|
//
|
||
|
// Running The Closure Compiler
|
||
|
//
|
||
|
|
||
|
Once you have the jar binary, running the Closure Compiler is straightforward.
|
||
|
|
||
|
On the command line, type
|
||
|
|
||
|
java -jar compiler.jar
|
||
|
|
||
|
This starts the compiler in interactive mode. Type
|
||
|
|
||
|
var x = 17 + 25;
|
||
|
|
||
|
then hit "Enter", then hit "Ctrl-Z" (on Windows) or "Ctrl-D" (on Mac or Linux)
|
||
|
and "Enter" again. The Compiler will respond:
|
||
|
|
||
|
var x=42;
|
||
|
|
||
|
The Closure Compiler has many options for reading input from a file,
|
||
|
writing output to a file, checking your code, and running
|
||
|
optimizations. To learn more, type
|
||
|
|
||
|
java -jar compiler.jar --help
|
||
|
|
||
|
You can read more detailed documentation about the many flags at
|
||
|
http://code.google.com/closure/compiler/docs/gettingstarted_app.html
|
||
|
|
||
|
|
||
|
//
|
||
|
// Compiling Multiple Scripts
|
||
|
//
|
||
|
|
||
|
If you have multiple scripts, you should compile them all together with
|
||
|
one compile command.
|
||
|
|
||
|
java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
|
||
|
|
||
|
The Closure Compiler will concatenate the files in the order they're
|
||
|
passed at the command line.
|
||
|
|
||
|
If you need to compile many, many scripts together, you may start to
|
||
|
run into problems with managing dependencies between scripts. You
|
||
|
should check out the Closure Library. It contains functions for
|
||
|
enforcing dependencies between scripts, and a tool called calcdeps.py
|
||
|
that knows how to give scripts to the Closure Compiler in the right
|
||
|
order.
|
||
|
|
||
|
http://code.google.com/p/closure-library/
|
||
|
|
||
|
//
|
||
|
// Licensing
|
||
|
//
|
||
|
|
||
|
Unless otherwise stated, all source files are licensed under
|
||
|
the Apache License, Version 2.0.
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code under:
|
||
|
src/com/google/javascript/rhino
|
||
|
test/com/google/javascript/rhino
|
||
|
|
||
|
URL: http://www.mozilla.org/rhino
|
||
|
Version: 1.5R3, with heavy modifications
|
||
|
License: Netscape Public License and MPL / GPL dual license
|
||
|
|
||
|
Description: A partial copy of Mozilla Rhino. Mozilla Rhino is an
|
||
|
implementation of JavaScript for the JVM. The JavaScript parser and
|
||
|
the parse tree data structures were extracted and modified
|
||
|
significantly for use by Google's JavaScript compiler.
|
||
|
|
||
|
Local Modifications: The packages have been renamespaced. All code not
|
||
|
relavant to parsing has been removed. A JSDoc parser and static typing
|
||
|
system have been added.
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code in:
|
||
|
lib/libtrunk_rhino_parser_jarjared.jar
|
||
|
|
||
|
Rhino
|
||
|
URL: http://www.mozilla.org/rhino
|
||
|
Version: Trunk
|
||
|
License: Netscape Public License and MPL / GPL dual license
|
||
|
|
||
|
Description: Mozilla Rhino is an implementation of JavaScript for the JVM.
|
||
|
|
||
|
Local Modifications: None. We've used JarJar to renamespace the code
|
||
|
post-compilation. See:
|
||
|
http://code.google.com/p/jarjar/
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code in:
|
||
|
lib/args4j_deploy.jar
|
||
|
|
||
|
Args4j
|
||
|
URL: https://args4j.dev.java.net/
|
||
|
Version: 2.0.9
|
||
|
License: MIT
|
||
|
|
||
|
Description:
|
||
|
args4j is a small Java class library that makes it easy to parse command line
|
||
|
options/arguments in your CUI application.
|
||
|
|
||
|
Local Modifications: None.
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code in:
|
||
|
lib/guava-r06.jar
|
||
|
|
||
|
Guava Libraries
|
||
|
URL: http://code.google.com/p/guava-libraries/
|
||
|
Version: R6
|
||
|
License: Apache License 2.0
|
||
|
|
||
|
Description: Google's core Java libraries.
|
||
|
|
||
|
Local Modifications: None.
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code in:
|
||
|
lib/hamcrest-core-1.1.jar
|
||
|
|
||
|
Hamcrest
|
||
|
URL: http://code.google.com/p/hamcrest
|
||
|
License: BSD
|
||
|
License File: LICENSE
|
||
|
|
||
|
Description:
|
||
|
Provides a library of matcher objects (also known as constraints or
|
||
|
predicates) allowing 'match' rules to be defined declaratively, to be used in
|
||
|
other frameworks. Typical scenarios include testing frameworks, mocking
|
||
|
libraries and UI validation rules.
|
||
|
|
||
|
Local modifications:
|
||
|
The original jars contained both source code and compiled classes.
|
||
|
|
||
|
hamcrest-core-1.1.jar just contains the compiled classes.
|
||
|
|
||
|
|
||
|
|
||
|
-----
|
||
|
Code in:
|
||
|
lib/jsr305.jar
|
||
|
|
||
|
Annotations for software defect detection
|
||
|
URL: http://code.google.com/p/jsr-305/
|
||
|
Version: svn revision 47
|
||
|
License: BSD License
|
||
|
|
||
|
Description: Annotations for software defect detection.
|
||
|
|
||
|
Local Modifications: None.
|
||
|
|
||
|
|
||
|
----
|
||
|
Code in:
|
||
|
lib/junit.jar
|
||
|
|
||
|
JUnit
|
||
|
URL: http://sourceforge.net/projects/junit/
|
||
|
Version: 4.5
|
||
|
License: Common Public License 1.0
|
||
|
|
||
|
Description: A framework for writing and running automated tests in Java.
|
||
|
|
||
|
Local Modifications: None.
|
||
|
|
||
|
|
||
|
---
|
||
|
Code in:
|
||
|
lib/protobuf-java-2.3.0.jar
|
||
|
|
||
|
Protocol Buffers
|
||
|
URL: http://code.google.com/p/protobuf/
|
||
|
Version: 2.3.0
|
||
|
License: New BSD License
|
||
|
|
||
|
Description: Supporting libraries for protocol buffers,
|
||
|
an encoding of structured data.
|
||
|
|
||
|
Local Modifications: None
|
||
|
|
||
|
|
||
|
---
|
||
|
Code in:
|
||
|
lib/ant_deploy.jar
|
||
|
|
||
|
URL: http://ant.apache.org/bindownload.cgi
|
||
|
Version: 1.6.5
|
||
|
License: Apache License 2.0
|
||
|
Description:
|
||
|
Ant is a Java based build tool. In theory it is kind of like "make"
|
||
|
without make's wrinkles and with the full portability of pure java code.
|
||
|
|
||
|
Local Modifications:
|
||
|
Modified apache-ant-1.6.5/bin/ant to look in the ant.runfiles directory
|
||
|
|
||
|
|
||
|
---
|
||
|
Code in:
|
||
|
lib/json.jar
|
||
|
URL: http://json.org/java/index.html
|
||
|
Version: JSON version 2
|
||
|
License: MIT license
|
||
|
Description:
|
||
|
JSON is a set of java files for use in transmitting data in JSON format.
|
||
|
|
||
|
Local Modifications: None
|
||
|
|