We finally have SBT support in 2.x series. This would be part of the
stable milestone scheduled for this Wednesday.
What this means is:
a. Lift Framework has support for SBT out of the box. Just 'cd' to
framework and do 'sbt' to see all that you have.
b. The basic archetypes (excluding jpa related ones) have SBT support
built-in. Thus, after you survive past the 'mvn archetype:generate' test
you are in for the good life of 'sbt' and/or 'mvn'.
c. Since SBT is configured to pick up dependencies from pom.xml You can
keep moving back and forth between Maven and SBT. Pick you pill, but
just remember that they put their stuff in different location after the
build.
d. Building a module builds their dependencies as well. Thus,
> sbt "project lift-webkit" test
would run test on lift-util, lift-json, lift-actor and lift-common. This
guarantees the 'rightness' of the build unit. However, it is quite
different from the way we are used to in Maven.
Enjoy and post back your experience.
- Indrajit
NB:
1. Remind yourself to do 'sbt update' whenver you see dependencies not
resolving when you think it should.
2. The SBT plugins have not been activated yet. They would be done later
- a todo.
3. The examples don't have SBT either. They would be added eventually.
4. Simplified SBT launch script might not work for Lift. I use this:
java -Xss4m -Xmx3g -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=1g -jar
`dirname $0`/sbt-launch.jar "$@"
> --
> You received this message because you are subscribed to the Google Groups "Lift" group.
> To post to this group, send email to lif...@googlegroups.com.
> To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
>
--
You received this message because you are subscribed to the Google Groups "Lift" group.
To post to this group, send email to lif...@googlegroups.com.
To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
--
You received this message because you are subscribed to the Google Groups "Lift" group.
To post to this group, send email to lif...@googlegroups.com.
To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Cheers, Tim
> --
> You received this message because you are subscribed to the Google Groups "Lift" group.
> To post to this group, send email to lif...@googlegroups.com.
> To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
Timothy Perrett wrote:
> Excellent - how were the publishing issues with maven resolved? Is the CI still being done through maven on hudson?
Publish will work, *sans the <artifact>.pom*. So if you configure
~/.ivy2/.credentials with Nexus details (realm, host, user, password)
you would be able to upload. But yes, the original problem remains.
That said, in immediate term didn't want to destabilize the CI/Hudson
arrangement that we already have. Thus publishing to scala-tools remains
a CI/Hudson (and thus Maven deal).
- Indrajit
Sent from my iPhone
Cheers, Tim
You seem to know what you're talking about Heiko, did I just see you volunteer? ;-)
Perhaps DavidB or someone who is up to speed with hudson can help... maybe we could rope in some others from Akka or Scalaz as they would no doubt benefit from such a plugin too.
Cheers, Tim
But me hesitation in moving Hudson build to SBT was more to do with
avoiding drastic change for dot release in the way we build and release
(we have two parallel branches to keep healthy all the time).
I am intending (read eager) to do this for 3.x series though.
- Indrajit
>>> Akka - Simpler Scalability, Fault-Tolerance, Concurrency& Remoting through Actors: akkasource.org
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups "Lift" group.
>>> To post to this group, send email to lif...@googlegroups.com.
>>> To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
>>> For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
>> --
>> You received this message because you are subscribed to the Google Groups "Lift" group.
>> To post to this group, send email to lif...@googlegroups.com.
>> To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
>> For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
>>
>>
>>
>>
>> --
>> Heiko Seeberger
>>
>> Company: weiglewilczek.com
>> Blog: heikoseeberger.name
>> Follow me: twitter.com/hseeberger
>> OSGi on Scala: scalamodules.org
>> Lift, the simply functional web framework: liftweb.net
>> Stambecco, highly scalable computing: stambecco.org
>> Akka - Simpler Scalability, Fault-Tolerance, Concurrency& Remoting through Actors: akkasource.org
Cheers, Tim
Timothy Perrett wrote:
> Why is the update of SBT so buggy? I had to run it twice to get all the dependencies! Its never ever done that before with any other project!
Hmm, looks like the problem is still there for real. I had gone mad
because of this a while back. I couldn't diagnose anything significant.
Since I was on fragile internet connection then and it didn't happen
later on, I conveniently put this on connectivity issue.
I will revive my investigation. My hunch is either we don't have right
dependency declaration for some libraries somewhere in one of the
pom.xml or SBT (via Ivy) doesn't handle the dependencies as expected.
There could be a corner case somewhere which most SBT projects don't
encounter. Our's is kinda unique in that we use pom.xml to resolve
dependencies. Scalate is the only other one that comes to my mind which
does this.
To be honest, I cant compile anything right now. It just blows up with the below (which looks to be a significant error to me). Its almost like the dependency tree has been defined incorrectly.
Cheers, Tim
[info] Building project lift-framework 2.1-SNAPSHOT against Scala 2.7.7
[info] using LiftFrameworkProject with sbt 0.7.4 and Scala 2.7.7
> compile
[info]
[info] == lift-common / compile ==
[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
[info] Nothing to compile.
[info] Post-analysis: 50 classes.
[info] == lift-common / compile ==
[info]
[info] == lift-actor / compile ==
[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
[info] Nothing to compile.
[info] Post-analysis: 43 classes.
[info] == lift-actor / compile ==
[info]
[info] == lift-mapper / compile ==
[info] Source analysis: 38 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
java.lang.RuntimeException: malformed Scala signature of S at 31255; reference value util of package liftweb refers to nonexisting symbol.
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.errorBadSignature(UnPickler.scala:762)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readSymbol(UnPickler.scala:172)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readSymbolRef$1.apply(UnPickler.scala:714)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readSymbolRef$1.apply(UnPickler.scala:714)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$at(UnPickler.scala:139)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readSymbolRef(UnPickler.scala:714)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readType(UnPickler.scala:247)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef$1.apply(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef$1.apply(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$at(UnPickler.scala:139)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readType(UnPickler.scala:253)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef$1.apply(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef$1.apply(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$at(UnPickler.scala:139)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readTypeRef(UnPickler.scala:715)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readType$1.apply(UnPickler.scala:275)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$$anonfun$scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readType$1.apply(UnPickler.scala:275)
at scala.tools.nsc.symtab.classfile.PickleBuffer.until(PickleBuffer.scala:127)
at scala.tools.nsc.symtab.classfile.PickleBuffer.until(PickleBuffer.scala:127)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$readType(UnPickler.scala:275)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$LazyTypeRef$$anonfun$32$$anonfun$apply$4.apply(UnPickler.scala:779)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$LazyTypeRef$$anonfun$32$$anonfun$apply$4.apply(UnPickler.scala:779)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle.scala$tools$nsc$symtab$classfile$UnPickler$UnPickle$$at(UnPickler.scala:139)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$LazyTypeRef$$anonfun$32.apply(UnPickler.scala:779)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$LazyTypeRef$$anonfun$32.apply(UnPickler.scala:779)
at scala.tools.nsc.Global$$anonfun$6.apply(Global.scala:747)
at scala.tools.nsc.Global$$anonfun$6.apply(Global.scala:747)
at scala.tools.nsc.symtab.classfile.UnPickler$UnPickle$LazyTypeRef.complete(UnPickler.scala:779)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.symtab.Types$TypeRef.thisInfo(Types.scala:1408)
at scala.tools.nsc.symtab.Types$TypeRef.baseClasses(Types.scala:1551)
at scala.tools.nsc.symtab.Types$SimpleTypeProxy$class.baseClasses(Types.scala:165)
at scala.tools.nsc.symtab.Types$SingletonType.baseClasses(Types.scala:853)
at scala.tools.nsc.symtab.Types$Type.findMember(Types.scala:681)
at scala.tools.nsc.symtab.Types$Type.member(Types.scala:386)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.importedSymbol(Contexts.scala:611)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$1(Typers.scala:2939)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3417)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:870)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.qual(Contexts.scala:584)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.importedSymbol(Contexts.scala:611)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$1(Typers.scala:2939)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3417)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:870)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.qual(Contexts.scala:584)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.importedSymbol(Contexts.scala:611)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$1(Typers.scala:2939)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3417)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:870)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.qual(Contexts.scala:584)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.importedSymbol(Contexts.scala:611)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$1(Typers.scala:2939)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3278)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3415)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:3417)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:870)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.qual(Contexts.scala:584)
at scala.tools.nsc.typechecker.Contexts$ImportInfo.importedSymbol(Contexts.scala:611)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$1(Typers.scala:2939)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typedType(Typers.scala:3429)
at scala.tools.nsc.typechecker.Typers$Typer.typedType(Typers.scala:3432)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$3.apply(Typers.scala:918)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$3.apply(Typers.scala:918)
at scala.List.map(List.scala:812)
at scala.tools.nsc.typechecker.Typers$Typer.parentTypes(Typers.scala:918)
at scala.tools.nsc.typechecker.Namers$Namer.templateSig(Namers.scala:546)
at scala.tools.nsc.typechecker.Namers$Namer.classSig(Namers.scala:603)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:838)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.typechecker.Namers$PolyTypeCompleter.complete(Namers.scala:993)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.symtab.Symbols$Symbol.initialize(Symbols.scala:669)
at scala.tools.nsc.typechecker.Typers$Typer.parentTypes(Typers.scala:920)
at scala.tools.nsc.typechecker.Namers$Namer.templateSig(Namers.scala:546)
at scala.tools.nsc.typechecker.Namers$Namer.classSig(Namers.scala:603)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:838)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:415)
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$typeCompleter$1.apply(Namers.scala:413)
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:982)
at scala.tools.nsc.typechecker.Namers$PolyTypeCompleter.complete(Namers.scala:993)
at scala.tools.nsc.symtab.Symbols$Symbol.info(Symbols.scala:555)
at scala.tools.nsc.symtab.Symbols$Symbol.initialize(Symbols.scala:669)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3078)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3395)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:1598)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.List$.loop$1(List.scala:300)
at scala.List$.mapConserve(List.scala:317)
at scala.List$.loop$1(List.scala:304)
at scala.List$.mapConserve(List.scala:317)
at scala.List$.loop$1(List.scala:304)
at scala.List$.mapConserve(List.scala:317)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3084)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3395)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:1598)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.List$.loop$1(List.scala:300)
at scala.List$.mapConserve(List.scala:317)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3084)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3395)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:1598)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$19.apply(Typers.scala:1643)
at scala.List$.loop$1(List.scala:300)
at scala.List$.mapConserve(List.scala:317)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:1643)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3084)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3358)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:3395)
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$2.apply(Analyzer.scala:41)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:267)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
at scala.Iterator$class.foreach(Iterator.scala:414)
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:266)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:246)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:574)
at scala.tools.nsc.Global$Run.compile(Global.scala:667)
at xsbt.CompilerInterface.run(CompilerInterface.scala:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at xsbt.AnalyzingCompiler.call(AnalyzingCompiler.scala:40)
at xsbt.AnalyzingCompiler.apply(AnalyzingCompiler.scala:18)
at sbt.Compile.processScala(Compile.scala:76)
at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:45)
at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:42)
at scala.Option.orElse(Option.scala:102)
at sbt.CompilerCore.doCompile(Compile.scala:41)
at sbt.CompilerCore.apply(Compile.scala:29)
at sbt.AbstractCompileConditional.run$1(Conditional.scala:341)
at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:344)
at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:344)
at sbt.classfile.Analyze$.apply(Analyze.scala:110)
at sbt.AbstractCompileConditional.execute(Conditional.scala:344)
at sbt.Conditional$class.run(Conditional.scala:43)
at sbt.AbstractCompileConditional.run(Conditional.scala:231)
at sbt.BasicScalaProject.sbt$BasicScalaProject$$doCompile(DefaultProject.scala:259)
at sbt.BasicScalaProject$$anonfun$compileAction$1.apply(DefaultProject.scala:273)
at sbt.BasicScalaProject$$anonfun$compileAction$1.apply(DefaultProject.scala:273)
at sbt.TaskManager$Task.invoke(TaskManager.scala:62)
at sbt.impl.RunTask.doRun$1(RunTask.scala:77)
at sbt.impl.RunTask.runTask(RunTask.scala:85)
at sbt.impl.RunTask.sbt$impl$RunTask$$runIfNotRoot(RunTask.scala:60)
at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$2.apply(RunTask.scala:48)
at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$2.apply(RunTask.scala:48)
at sbt.Distributor$Run$Worker$$anonfun$2.apply(ParallelRunner.scala:131)
at sbt.Distributor$Run$Worker$$anonfun$2.apply(ParallelRunner.scala:131)
at sbt.Control$.trapUnit(Control.scala:19)
at sbt.Distributor$Run$Worker.run(ParallelRunner.scala:131)
[info] == lift-mapper / compile ==
Doh.
To be honest, I cant compile anything right now. It just blows up with the below (which looks to be a significant error to me). Its almost like the dependency tree has been defined incorrectly.
> sbt "project lift-mapper" clean compile
...
...
[warn] there were deprecation warnings; re-run with -deprecation for details
[warn] 84 warnings found
[info] Compilation successful.
[info] Post-analysis: 1334 classes.
[info] == compile ==
[success] Successful.
[info]
[info] Total time: 92 s, completed Sep 1, 2010 4:24:22 AM
[info]
[info] Total session time: 94 s, completed Sep 1, 2010 4:24:22 AM
> sbt "project lift-mapper" clean test
...
...
...
[info] + correctly handle removing an unsaved item
[info] == net.liftweb.mapper.ItemsListSpecs ==
[info]
[info] == test-complete ==
[info] == test-complete ==
[info]
[info] == test-finish ==
[info] Passed: : Total 145, Failed 0, Errors 0, Passed 93, Skipped 52
[info]
[info] All tests PASSED.
[info] == test-finish ==
[info]
[info] == test-cleanup ==
[info] == test-cleanup ==
[info]
[info] == test ==
[info] == test ==
[success] Successful.
[info]
[info] Total time: 247 s, completed Sep 1, 2010 4:34:44 AM
[info]
[info] Total session time: 251 s, completed Sep 1, 2010 4:34:44 AM
[success] Build completed successfully.
Tim, just to narrow it down, can you please do "sbt clean-lib
clean-cache" before retrying?
The update bug is still a problem though. Need to investigate.
- Indrajit
>> Perrett<tim...@getintheloop.eu <mailto:tim...@getintheloop.eu>>
>> wrote:
>> >>>>> You seem to know what you're talking about Heiko, did I just
>> see you volunteer? ;-)
>> >>>>>
>> >>>>> Sorry, but I have to say no. I know almost nothing about it
>> except that I talked to some folks that should know some months
>> ago. They told me it would take me (Hudson noob) a week or so.
>> That was when I stopped thinking about that particular thingy ...
>> And right now I am very very busy, so "no".
>> >>>>>
>> >>>>> Heiko
>> >>>>>
>> >>>>>
>> >>>>> Cheers, Tim
>> >>>>>
>> >>>>> On 31 Aug 2010, at 19:57, Heiko Seeberger wrote:
>> >>>>>
>> >>>>>> Hudson plugins are feasible, but will take some time (> 1 day).
>> >>>>>>
>> >>>>>> Heiko
>> >>>>>>
>> >>>>>> On 31 August 2010 20:49, Timothy
>> Perrett<tim...@getintheloop.eu <mailto:tim...@getintheloop.eu>>
>> wrote:
>> >>>>>> Yeah I hear that - is there a Hudson plugin for SBT? If
>> not, would it be easy to make one? SBT plugins are easy to make
>> but I'm not sure what is needed from the Java side
>> >>>>>>
>> >>>>>> Sent from my iPhone
>> >>>>>>
>> >>>>>> On 31 Aug 2010, at 19:23, Indrajit
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>>>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>>>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>> --
>> >>>>>>> You received this message because you are subscribed to
>> the Google Groups "Lift" group.
>> >>>>>>> To post to this group, send email to
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>>>>>
>> >>>>>>>
>> >>>>>> --
>> >>>>>> You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> >>>>>> To post to this group, send email to
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> --
>> >>>>>> Heiko Seeberger
>> >>>>>>
>> >>>>>> Company: weiglewilczek.com <http://weiglewilczek.com/>
>> >>>>>> Blog: heikoseeberger.name <http://heikoseeberger.name/>
>> >>>>>> Follow me: twitter.com/hseeberger
>> <http://twitter.com/hseeberger>
>> >>>>>> OSGi on Scala: scalamodules.org <http://scalamodules.org/>
>> >>>>>> Lift, the simply functional web framework: liftweb.net
>> <http://liftweb.net/>
>> >>>>>> Stambecco, highly scalable computing: stambecco.org
>> >>>>>> Akka - Simpler Scalability, Fault-Tolerance, Concurrency&
>> Remoting through Actors: akkasource.org <http://akkasource.org/>
>> >>>>>>
>> >>>>>> --
>> >>>>>> You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> >>>>>> To post to this group, send email to
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>>> --
>> >>>>> You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> >>>>> To post to this group, send email to
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> Heiko Seeberger
>> >>>>>
>> >>>>> Company: weiglewilczek.com <http://weiglewilczek.com/>
>> >>>>> Blog: heikoseeberger.name <http://heikoseeberger.name/>
>> >>>>> Follow me: twitter.com/hseeberger
>> <http://twitter.com/hseeberger>
>> >>>>> OSGi on Scala: scalamodules.org <http://scalamodules.org/>
>> >>>>> Lift, the simply functional web framework: liftweb.net
>> <http://liftweb.net/>
>> >>>>> Stambecco, highly scalable computing: stambecco.org
>> >>>>> Akka - Simpler Scalability, Fault-Tolerance, Concurrency&
>> Remoting through Actors: akkasource.org <http://akkasource.org/>
>> >>>>>
>> >>>>> --
>> >>>>> You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> >>>>> To post to this group, send email to
>> lif...@googlegroups.com <mailto:lif...@googlegroups.com>.
>> >>>>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>>>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>> --
>> >>> You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> >>> To post to this group, send email to lif...@googlegroups.com
>> <mailto:lif...@googlegroups.com>.
>> >>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> >>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >>>
>> >>>
>> >>
>> >
>> > --
>> > You received this message because you are subscribed to the
>> Google Groups "Lift" group.
>> > To post to this group, send email to lif...@googlegroups.com
>> <mailto:lif...@googlegroups.com>.
>> > To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> > For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>> >
>> >
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Lift" group.
>> To post to this group, send email to lif...@googlegroups.com
>> <mailto:lif...@googlegroups.com>.
>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb%2Bunsu...@googlegroups.com>.
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>>
>>
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> <http://liftweb.net/>
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Blog: http://goodstuff.im <http://goodstuff.im/>
>> Surf the harmonics
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Lift" group.
>> To post to this group, send email to lif...@googlegroups.com
>> <mailto:lif...@googlegroups.com>.
>> To unsubscribe from this group, send email to
>> liftweb+u...@googlegroups.com
>> <mailto:liftweb+u...@googlegroups.com>.
529 cd framework/
530 ls
531 sbt "project lift-mapper" clean compile
got a bunch of errors about "net.liftweb" not existing, so aborted and tried:
532 sbt "project lift-mapper" update clean compile
snip snip snip
[info] == compile ==
[info] Source analysis: 38 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
java.lang.RuntimeException: malformed Scala signature of S at 31255; reference value util of package liftweb refers to nonexisting symbol.
snip snip snip
Meanwhile, on the 2.8 branch the same (after clean-lib clean-cache)
[info] == compile ==
[info] Source analysis: 38 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
[info] 'compiler-interface' not yet compiled for Scala 2.8.0.final. Compiling...
[info] Compilation completed in 16.516 s
[error] class file needed by S is missing.
[error] reference value util of package net.liftweb refers to nonexisting symbol.
[error] one error found
-Ross
Also, I didn't have any problems with the build. I did an sbt update compile on the 2.8 branch and everything worked fine.
maka ~/code/lift/framework (2.x-2.8_devel) % sbt update compile
[info] Building project lift-framework 2.1-SNAPSHOT against Scala 2.8.0
[info] using LiftFrameworkProject with sbt 0.7.4 and Scala 2.7.7
...
[info] == lift-framework / compile ==
[info] == lift-framework / compile ==
[success] Successful.
[info]
[info] Total time: 176 s, completed Sep 1, 2010 2:45:40 PM
[info]
[info] Total session time: 179 s, completed Sep 1, 2010 2:45:40 PM
[success] Build completed successfully.
What im hearing is that we only need maven now because of the CI workflow. This is of course very valuable, but maybe we should consider finding a solution at that end to use SBT natively rather than trying to fudge it through as it is now? Its not really an option (IMHO) for the build to be this busted in a number of different ways for different people - its simply too unpredictable.
If we had a solution for SBT CI, then we could just ditch maven, right? Everything else would still build as intended so users could use maven irrespective of what we were building lift core with (this is what akka does)
Cheers, Tim
About Hudson integration, like Joshua said, Hudson is able to run batch script to run build (or other stuff, eg : I used it to create interactive deployment ( form + running Capistrano) last year).
So call sbt from hudson, you will loose some report (usefull ?), that you could reactivate later.
Disclaimer : I'm not a hudson expert (nor a hudson plugin developper).
my 2c
/davidB
I am still not sure if the two problems that we saw have anything to do
with SBT using pom.xml. I have encountered the issue of calling update
multiple times earlier, just cannot recreate that anymore. I don't know
how to deal with the Scala issue though.
I'll fold-in all the answers related to the choice of using pom.xml here.
1. Hudson/CI is *not* the main reason for keeping the pom.xmls around.
The main reason is to avoid making any drastic change in a dot release.
Removing the pom.xmls would mean that 'mvn foo' won't work anymore. That
is too big a breaking change for a dot release IMO.
2. The other alternative is to add all the dependencies inline in SBT
build config. That would mean we'll have to maintain the dependencies
and their versions in two different place (sbt, mvn). Some of the
committers are already troubled with the overhead of maintaining two
parallel branches (2.7, 2.8). The trouble just multiplies with two
different declarations for dependencies.
3. The pom.xmls are used by SBT *only* for picking up the dependencies
section to do the dependency resolution, nothing else. SBT has improved
a *lot* over last few releases in aligning with Maven's convention.
Since, the SBT wiki claims to be able to do automatic dependency
management using pom.xml, given it's track record, I trust that it
actually does so :)
4. Some (Kris et al) don't like the fact that, unlike Maven, SBT builds
the dependencies of a project before building itself. Having the
pom.xml's around would make them feel better :)
Given all these, I got lured into selecting the approach that, if we can
get working, can give us a happy middle ground.
- Indrajit
If SBT/Ivy can find the parent POM from remote repository it doesn't
complain. This is pretty much the case for us. We always ensure that the
right parent POMs is present in the remote repository thus averting the
issue.
The other cheaper option is to do 'mvn install' of the parent pom in
local Maven repo and then specify the repo explicitly in you SBT config
as thus:
val mavenLocal = "Local Maven Repository" at "file://" + (Path.userHome
/ ".m2" / "repository").absolutePath