 ~~ Licensed to the Apache Software Foundation (ASF) under one or more
 ~~ contributor license agreements.  See the NOTICE file distributed with
 ~~ this work for additional information regarding copyright ownership.
 ~~ The ASF licenses this file to You 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.
 
 ------
Download Apache MyFaces Extension Scripting
 ------

Download Apache MyFaces Extension Scripting


 Apache MyFaces 1.0.3 is the newest version (not yet released). Significant changes have been made
 to Ext-Scripting 1.0.3, a general refactoring for maintainability was performed and basic
 Scala support added.
 Note, this is the first release, which is java6 and MyFaces 2.1.x only. For older versions of MyFaces
 and Java 5, download Ext-Scripting 1.0.2.

 Download Links and Release Notes will follow soon.

Ext-Scripting 1.0.2 (latest version supporting MyFaces 1.2.x)

 Apache MyFaces Extension Scripting now has a 1.0.2 bugfix release which reenables compatibility with newer MyFaces
 versions:
 Apache MyFaces is distributed as jar archives for inclusion and as war archives for the
 examples.

 Note this is the last release which will support java 5 and MyFaces 1.x from version 1.0.3 onwards
 only Java 6 and JSF 2.1 will be supported.

 Use the links below to download


  Release notes can be found {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310964&version=12316367}here}}

*-------------------------+---------+----------+-----------+
|                         | Server | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 1.2 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.2/extscript-myfaces12-bundle-1.0.2.jar} extscript-myfaces12-bundle-1.0.2.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.2/extscript-myfaces12-bundle-1.0.2.jar.asc.md5} extscript-myfaces12-bundle-1.0.2.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.2/extscript-myfaces12-bundle-1.0.2.jar.asc}extscript-myfaces12-bundle-1.0.2.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 2.1 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.2/extscript-myfaces20-bundle-1.0.2.jar} extscript-myfaces20-bundle-1.0.2.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.2/extscript-myfaces20-bundle-1.0.2.jar.asc.md5} extscript-myfaces20-bundle-1.0.2.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.2/extscript-myfaces20-bundle-1.0.2.jar.asc}extscript-myfaces20-bundle-1.0.2.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 1.2 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.2/myfaces12-example-1.0.2.war} myfaces12-example-1.0.2.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.2/myfaces12-example-1.0.2.war.asc.md5} myfaces12-example-1.0.2.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.2/myfaces12-example-1.0.2.war.asc}myfaces12-example-1.0.2.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 2.0 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.2/myfaces20-example-1.0.2.war} myfaces20-example-1.0.2.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.2/myfaces20-example-1.0.2.war.asc.md5} myfaces20-example-1.0.2.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.2/myfaces20-example-1.0.2.war.asc}myfaces20-example-1.0.2.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Blank Application JSF2 (war)      | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.2/myfaces20-extscript-helloworld-1.0.2.war} myfaces20-extscript-helloworld-1.0.2.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.2/myfaces20-extscript-helloworld-1.0.2.war.md5} myfaces20-extscript-helloworld-1.0.2.war.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.2/myfaces20-extscript-helloworld-1.0.2.war.asc} myfaces20-extscript-helloworld-1.0.2.war.asc}} |
*-------------------------+---------+----------+-----------+


Older Versions


 Apache MyFaces Extension Scripting now has a 1.0.1 bugfix release which reenables compatibility with newer MyFaces
 versions:
 Apache MyFaces is distributed as jar archives for inclusion and as war archives for the
 examples.


 Use the links below to download


  Release notes can be found {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310964&version=12316367}here}}

*-------------------------+---------+----------+-----------+
|                         | Server | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 1.2 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.1/extscript-myfaces12-bundle-1.0.1.jar} extscript-myfaces12-bundle-1.0.1.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.1/extscript-myfaces12-bundle-1.0.1.jar.asc.md5} extscript-myfaces12-bundle-1.0.1.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0.1/extscript-myfaces12-bundle-1.0.1.jar.asc}extscript-myfaces12-bundle-1.0.1.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 2.0 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.1/extscript-myfaces20-bundle-1.0.1.jar} extscript-myfaces20-bundle-1.0.1.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.1/extscript-myfaces20-bundle-1.0.1.jar.asc.md5} extscript-myfaces20-bundle-1.0.1.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0.1/extscript-myfaces20-bundle-1.0.1.jar.asc}extscript-myfaces20-bundle-1.0.1.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 1.2 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.1/myfaces12-example-1.0.1.war} myfaces12-example-1.0.1.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.1/myfaces12-example-1.0.1.war.asc.md5} myfaces12-example-1.0.1.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0.1/myfaces12-example-1.0.1.war.asc}myfaces12-example-1.0.1.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 2.0 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.1/myfaces20-example-1.0.1.war} myfaces20-example-1.0.1.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.1/myfaces20-example-1.0.1.war.asc.md5} myfaces20-example-1.0.1.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0.1/myfaces20-example-1.0.1.war.asc}myfaces20-example-1.0.1.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Blank Application JSF2 (war)      | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.1/myfaces20-extscript-helloworld-1.0.1.war} myfaces20-extscript-helloworld-1.0.1.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.1/myfaces20-extscript-helloworld-1.0.1.war.md5} myfaces20-extscript-helloworld-1.0.1.war.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0.1/myfaces20-extscript-helloworld-1.0.1.war.asc} myfaces20-extscript-helloworld-1.0.1.war.asc}} |
*-------------------------+---------+----------+-----------+


 As of now the project has an initial 1.0 release.
 The initial release will only run with Apache MyFaces up to 2.0.2.
 A subsequent release will follow soon which will support later versions
 of Apache MyFaces.

 Apache MyFaces is distributed as jar archives for inclusion and as war archives for the
 examples.


 Use the links below to download


  Release notes can be found {{{https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=10600&version=12316153}here}}

*-------------------------+---------+----------+-----------+
|                         | Server | Checksum | Signature |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 1.2 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0/extscript-myfaces12-bundle-1.0.jar} extscript-myfaces12-bundle-1.0.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0/extscript-myfaces12-bundle-1.0.jar.asc.md5} extscript-myfaces12-bundle-1.0.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces12-bundle/1.0/extscript-myfaces12-bundle-1.0.jar.asc}extscript-myfaces12-bundle-1.0.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script MyFaces 2.0 bundle(jar)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0/extscript-myfaces20-bundle-1.0.jar} extscript-myfaces20-bundle-1.0.jar}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0/extscript-myfaces20-bundle-1.0.jar.asc.md5} extscript-myfaces20-bundle-1.0.jar.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/extscript-myfaces20-bundle/1.0/extscript-myfaces20-bundle-1.0.jar.asc}extscript-myfaces20-bundle-1.0.jar.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 1.2 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0/myfaces12-example-1.0.war} myfaces12-example-1.0.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0/myfaces12-example-1.0.war.asc.md5} myfaces12-example-1.0.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces12-example/1.0/myfaces12-example-1.0.war.asc}myfaces12-example-1.0.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Demo Application MyFaces 2.0 (war)     | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0/myfaces20-example-1.0.war} myfaces20-example-1.0.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0/myfaces20-example-1.0.war.asc.md5} myfaces20-example-1.0.war.asc.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-example/1.0/myfaces20-example-1.0.war.asc}myfaces20-example-1.0.war.asc}} |
*-------------------------+---------+----------+-----------+
| Ext-Script Blank Application JSF2 (war)      | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0/myfaces20-extscript-helloworld-1.0.war} myfaces20-extscript-helloworld-1.0.war}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0/myfaces20-extscript-helloworld-1.0.war.md5} myfaces20-extscript-helloworld-1.0.war.md5}} | {{{https://repository.apache.org/content/repositories/releases/org/apache/myfaces/extensions/scripting/myfaces20-extscript-helloworld/1.0/myfaces20-extscript-helloworld-1.0.war.asc} myfaces20-extscript-helloworld-1.0.war.asc}} |
*-------------------------+---------+----------+-----------+


Manual Checkout and Build

 For manual checkout and building instructions of the Ext-Scripting Trunk  {{{installation.html}Ext-Scripting installation page}}


Latest source code from SVN repository

  If you want to use the latest Apache MyFaces Ext-Scripting features, the source code is under
  version control with SVN.  Click {{{source-repository.html} here }}
  for information on how to use the ASF MyFaces Ext-Scripting SVN Repository.

  Building instructions can be found under {{{installation.html}Ext-Scripting installation page}}

  
