- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
Scala Interpreter can't find scala object in Webstart environment
Tue, 2011-05-24, 17:05
Hi,
It's a repost from StackOverflow (http://stackoverflow.com/questions/
6100497/scala-interpreter-cant-find-scala-object-in-webstart-
environment).
I want to embed Scala Interpreter in my application that is run in
Webstart environment, but I get:
Failed to initialize compiler: object scala not found.
** Note that as of 2.8 scala does not assume use of the java
classpath.
** For the old behavior pass -usejavacp to scala, or if using a
Settings
** object programatically, settings.usejavacp.value = true.
with the following initialization code:
val settings = new Settings()
val in = new Interpreter(settings)
in.setContextClassLoader()
I tried
settings.usejavacp.value = true
and
val settings = new Settings()
settings.usejavacp.value = true
settings.classpath.value += File.pathSeparator +
System.getProperty("java.class.path")
val in = new Interpreter(settings) {
override protected def parentClassLoader = getClass.getClassLoader
}
in.setContextClassLoader()
with no success. Could someone help me with this?
I tried to run as a jar with Main class with settings.Ylogcp.value =
true that showed
Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
Defaults: object Defaults {
scalaHome =
javaBootClassPath =
C:\Program Files\Java\jre6\lib\resources.jar
C:\Program Files\Java\jre6\lib\rt.jar
C:\Program Files\Java\jre6\lib\sunrsasign.jar
C:\Program Files\Java\jre6\lib\jsse.jar
C:\Program Files\Java\jre6\lib\jce.jar
C:\Program Files\Java\jre6\lib\charsets.jar
C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
C:\Program Files\Java\jre6\classes
scalaLibDirFound = None
scalaLibFound =
scalaBootClassPath =
scalaPluginPath = misc\scala-devel\plugins
}
After java boot/extdirs classpath has 2 entries:
directory classpath: E:\dev\MyApp\target\myapp.jar
directory classpath: .
[Classpath = C:\Program Files\Java\jre6\lib\resources.jar;C:\Program
Files\Java\jre6\lib\rt.jar;C:\Program Files\Java\jre6\lib\jsse.jar;C:
\Program Files\Java\jre6\lib\jce.jar;C:\Program Files\Java\jre6\lib
\charsets.jar;C:\Program Files\Java\jre6\lib\ext\dnsns.jar;C:\Program
Files\Java\jre6\lib\ext\localedata.jar;C:\Program Files\Java\jre6\lib
\ext\sunjce_provider.jar;E:\dev\MyApp\target\myapp.jar;.]
Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
Defaults: object Defaults {
scalaHome =
javaBootClassPath =
C:\Program Files\Java\jre6\lib\resources.jar
C:\Program Files\Java\jre6\lib\rt.jar
C:\Program Files\Java\jre6\lib\sunrsasign.jar
C:\Program Files\Java\jre6\lib\jsse.jar
C:\Program Files\Java\jre6\lib\jce.jar
C:\Program Files\Java\jre6\lib\charsets.jar
C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
C:\Program Files\Java\jre6\classes
scalaLibDirFound = None
scalaLibFound =
scalaBootClassPath =
scalaPluginPath = misc\scala-devel\plugins
}
After java boot/extdirs classpath has 2 entries:
directory classpath: E:\dev\MyApp\target\myapp.jar
directory classpath: .
(java.class.path,E:\dev\MyApp\target\myapp.jar)
Webstart docs say it's not convenient to retrieve classpath for
webstarted apps and suggest using a classloader, but I can't figure
out how to do this with Interpreter. Any help is appreciated.
Thanks,
Alexander Nemish
Tue, 2011-05-24, 20:17
#2
Re: Scala Interpreter can't find scala object in Webstart envir
I have spent a long time setting up the interpreter to work with
webstart. Everything about webstart design is against doing this, so
you are in for a long ride. In the end I had to rebuild scala-lib.jar
and scala-compiler.jar in a temporary location. If this sounds
ridiculous that's because it is. Also it was the only portable and
sensible solution.
Here is the project (it's LGPL):
http://code.google.com/p/simplex3d/source/browse/#svn%2Ftrunk%2FSimplex3...
On Tue, May 24, 2011 at 12:29 PM, Trond Olsen wrote:
> Looks like you're missing the scala-library.jar in settings.classpath.
>
> On 24 May 2011 18:05, Alexander Nemish wrote:
>>
>> Hi,
>>
>> It's a repost from StackOverflow (http://stackoverflow.com/questions/
>> 6100497/scala-interpreter-cant-find-scala-object-in-webstart-
>> environment).
>>
>> I want to embed Scala Interpreter in my application that is run in
>> Webstart environment, but I get:
>>
>> Failed to initialize compiler: object scala not found.
>> ** Note that as of 2.8 scala does not assume use of the java
>> classpath.
>> ** For the old behavior pass -usejavacp to scala, or if using a
>> Settings
>> ** object programatically, settings.usejavacp.value = true.
>> with the following initialization code:
>>
>> val settings = new Settings()
>> val in = new Interpreter(settings)
>> in.setContextClassLoader()
>> I tried
>>
>> settings.usejavacp.value = true
>> and
>>
>> val settings = new Settings()
>> settings.usejavacp.value = true
>> settings.classpath.value += File.pathSeparator +
>> System.getProperty("java.class.path")
>> val in = new Interpreter(settings) {
>> override protected def parentClassLoader = getClass.getClassLoader
>> }
>> in.setContextClassLoader()
>> with no success. Could someone help me with this?
>>
>> I tried to run as a jar with Main class with settings.Ylogcp.value =
>> true that showed
>>
>> Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
>> Defaults: object Defaults {
>> scalaHome =
>> javaBootClassPath =
>> C:\Program Files\Java\jre6\lib\resources.jar
>> C:\Program Files\Java\jre6\lib\rt.jar
>> C:\Program Files\Java\jre6\lib\sunrsasign.jar
>> C:\Program Files\Java\jre6\lib\jsse.jar
>> C:\Program Files\Java\jre6\lib\jce.jar
>> C:\Program Files\Java\jre6\lib\charsets.jar
>> C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
>> C:\Program Files\Java\jre6\classes
>> scalaLibDirFound = None
>> scalaLibFound =
>> scalaBootClassPath =
>> scalaPluginPath = misc\scala-devel\plugins
>> }
>> After java boot/extdirs classpath has 2 entries:
>> directory classpath: E:\dev\MyApp\target\myapp.jar
>> directory classpath: .
>> [Classpath = C:\Program Files\Java\jre6\lib\resources.jar;C:\Program
>> Files\Java\jre6\lib\rt.jar;C:\Program Files\Java\jre6\lib\jsse.jar;C:
>> \Program Files\Java\jre6\lib\jce.jar;C:\Program Files\Java\jre6\lib
>> \charsets.jar;C:\Program Files\Java\jre6\lib\ext\dnsns.jar;C:\Program
>> Files\Java\jre6\lib\ext\localedata.jar;C:\Program Files\Java\jre6\lib
>> \ext\sunjce_provider.jar;E:\dev\MyApp\target\myapp.jar;.]
>> Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
>> Defaults: object Defaults {
>> scalaHome =
>> javaBootClassPath =
>> C:\Program Files\Java\jre6\lib\resources.jar
>> C:\Program Files\Java\jre6\lib\rt.jar
>> C:\Program Files\Java\jre6\lib\sunrsasign.jar
>> C:\Program Files\Java\jre6\lib\jsse.jar
>> C:\Program Files\Java\jre6\lib\jce.jar
>> C:\Program Files\Java\jre6\lib\charsets.jar
>> C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
>> C:\Program Files\Java\jre6\classes
>> scalaLibDirFound = None
>> scalaLibFound =
>> scalaBootClassPath =
>> scalaPluginPath = misc\scala-devel\plugins
>> }
>> After java boot/extdirs classpath has 2 entries:
>> directory classpath: E:\dev\MyApp\target\myapp.jar
>> directory classpath: .
>> (java.class.path,E:\dev\MyApp\target\myapp.jar)
>>
>> Webstart docs say it's not convenient to retrieve classpath for
>> webstarted apps and suggest using a classloader, but I can't figure
>> out how to do this with Interpreter. Any help is appreciated.
>>
>> Thanks,
>> Alexander Nemish
>
>
Tue, 2011-05-24, 20:57
#3
Re: Scala Interpreter can't find scala object in Webstart envir
Same with applets. :) I prepare with: scala-compiler,scala-library.jar,rt.jar -> proguard -> list classes to textfiles .. and at runtime: iterate through textfiles -> retrieve classfile resource -> bytes -> recreate scala-compiler,scala-library.jar,rt.jar. Or you could also just proguard, compress and include each library in the jar. The scala jars compress pretty well with lzma.
On 24 May 2011 21:11, Lex <lexn82@gmail.com> wrote:
On 24 May 2011 21:11, Lex <lexn82@gmail.com> wrote:
I have spent a long time setting up the interpreter to work with
webstart. Everything about webstart design is against doing this, so
you are in for a long ride. In the end I had to rebuild scala-lib.jar
and scala-compiler.jar in a temporary location. If this sounds
ridiculous that's because it is. Also it was the only portable and
sensible solution.
Here is the project (it's LGPL):
http://code.google.com/p/simplex3d/source/browse/#svn%2Ftrunk%2FSimplex3dConsole
On Tue, May 24, 2011 at 12:29 PM, Trond Olsen <trond@steinbit.org> wrote:
> Looks like you're missing the scala-library.jar in settings.classpath.
>
> On 24 May 2011 18:05, Alexander Nemish <anemish@googlemail.com> wrote:
>>
>> Hi,
>>
>> It's a repost from StackOverflow (http://stackoverflow.com/questions/
>> 6100497/scala-interpreter-cant-find-scala-object-in-webstart-
>> environment).
>>
>> I want to embed Scala Interpreter in my application that is run in
>> Webstart environment, but I get:
>>
>> Failed to initialize compiler: object scala not found.
>> ** Note that as of 2.8 scala does not assume use of the java
>> classpath.
>> ** For the old behavior pass -usejavacp to scala, or if using a
>> Settings
>> ** object programatically, settings.usejavacp.value = true.
>> with the following initialization code:
>>
>> val settings = new Settings()
>> val in = new Interpreter(settings)
>> in.setContextClassLoader()
>> I tried
>>
>> settings.usejavacp.value = true
>> and
>>
>> val settings = new Settings()
>> settings.usejavacp.value = true
>> settings.classpath.value += File.pathSeparator +
>> System.getProperty("java.class.path")
>> val in = new Interpreter(settings) {
>> override protected def parentClassLoader = getClass.getClassLoader
>> }
>> in.setContextClassLoader()
>> with no success. Could someone help me with this?
>>
>> I tried to run as a jar with Main class with settings.Ylogcp.value =
>> true that showed
>>
>> Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
>> Defaults: object Defaults {
>> scalaHome =
>> javaBootClassPath =
>> C:\Program Files\Java\jre6\lib\resources.jar
>> C:\Program Files\Java\jre6\lib\rt.jar
>> C:\Program Files\Java\jre6\lib\sunrsasign.jar
>> C:\Program Files\Java\jre6\lib\jsse.jar
>> C:\Program Files\Java\jre6\lib\jce.jar
>> C:\Program Files\Java\jre6\lib\charsets.jar
>> C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
>> C:\Program Files\Java\jre6\classes
>> scalaLibDirFound = None
>> scalaLibFound =
>> scalaBootClassPath =
>> scalaPluginPath = misc\scala-devel\plugins
>> }
>> After java boot/extdirs classpath has 2 entries:
>> directory classpath: E:\dev\MyApp\target\myapp.jar
>> directory classpath: .
>> [Classpath = C:\Program Files\Java\jre6\lib\resources.jar;C:\Program
>> Files\Java\jre6\lib\rt.jar;C:\Program Files\Java\jre6\lib\jsse.jar;C:
>> \Program Files\Java\jre6\lib\jce.jar;C:\Program Files\Java\jre6\lib
>> \charsets.jar;C:\Program Files\Java\jre6\lib\ext\dnsns.jar;C:\Program
>> Files\Java\jre6\lib\ext\localedata.jar;C:\Program Files\Java\jre6\lib
>> \ext\sunjce_provider.jar;E:\dev\MyApp\target\myapp.jar;.]
>> Classpath built from (-usejavacp = true -Ylog-classpath = true -d = .)
>> Defaults: object Defaults {
>> scalaHome =
>> javaBootClassPath =
>> C:\Program Files\Java\jre6\lib\resources.jar
>> C:\Program Files\Java\jre6\lib\rt.jar
>> C:\Program Files\Java\jre6\lib\sunrsasign.jar
>> C:\Program Files\Java\jre6\lib\jsse.jar
>> C:\Program Files\Java\jre6\lib\jce.jar
>> C:\Program Files\Java\jre6\lib\charsets.jar
>> C:\Program Files\Java\jre6\lib\modules\jdk.boot.jar
>> C:\Program Files\Java\jre6\classes
>> scalaLibDirFound = None
>> scalaLibFound =
>> scalaBootClassPath =
>> scalaPluginPath = misc\scala-devel\plugins
>> }
>> After java boot/extdirs classpath has 2 entries:
>> directory classpath: E:\dev\MyApp\target\myapp.jar
>> directory classpath: .
>> (java.class.path,E:\dev\MyApp\target\myapp.jar)
>>
>> Webstart docs say it's not convenient to retrieve classpath for
>> webstarted apps and suggest using a classloader, but I can't figure
>> out how to do this with Interpreter. Any help is appreciated.
>>
>> Thanks,
>> Alexander Nemish
>
>
Tue, 2011-05-24, 21:37
#4
Re: Scala Interpreter can't find scala object in Webstart envir
I am also using an index text file. I managed to get full scala-lib +
scala-compiler jars to about 7Mb with pack200 compression.
On Tue, May 24, 2011 at 2:49 PM, Trond Olsen wrote:
> Same with applets. :) I prepare with:
> scala-compiler,scala-library.jar,rt.jar -> proguard -> list classes to
> textfiles .. and at runtime: iterate through textfiles -> retrieve classfile
> resource -> bytes -> recreate scala-compiler,scala-library.jar,rt.jar. Or
> you could also just proguard, compress and include each library in the jar.
> The scala jars compress pretty well with lzma.
>
On 24 May 2011 18:05, Alexander Nemish <anemish@googlemail.com> wrote: