/* 
 | 
 * 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 
 |