This page is no longer maintained — Please continue to the home page at www.scala-lang.org

Scala Interpreter can't find scala object in Webstart environment

4 replies
Alexander Nemish
Joined: 2011-05-24,
User offline. Last seen 42 years 45 weeks ago.

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

tolsen77
Joined: 2008-10-08,
User offline. Last seen 1 year 38 weeks ago.
Re: Scala Interpreter can't find scala object in Webstart envir
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

Lex
Joined: 2010-02-28,
User offline. Last seen 42 years 45 weeks ago.
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
>
>

tolsen77
Joined: 2008-10-08,
User offline. Last seen 1 year 38 weeks ago.
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:
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
>
>

Lex
Joined: 2010-02-28,
User offline. Last seen 42 years 45 weeks ago.
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.
>

Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland