Giter Site home page Giter Site logo

foldright / sbt-one-log Goto Github PK

View Code? Open in Web Editor NEW
47.0 9.0 4.0 88 KB

๐ŸŒณ sbt-one-log resolve the logging dependencies chaos in your development, just make logging work as you expect and follow the best practice, automatically.

Home Page: https://github.com/foldright/sbt-one-log

License: Apache License 2.0

Shell 1.81% Scala 94.28% Mustache 3.91%
sbt scala slf4j logback log4j jar-hell logging-dependencies

sbt-one-log's Issues

multi project with sbt 0.13.7 failed

[info] [error] (module1/*:update) sbt.ResolveException: download failed: javax.jms#jms;1.1!jms.jar
[info] [error] download failed: com.sun.jdmk#jmxtools;1.2.1!jmxtools.jar
[info] [error] download failed: com.sun.jmx#jmxri;1.2.1!jmxri.jar
[info] [error] Total time: 13 s, completed 2015-3-6 23:54:36
[info] [warn]   ::::::::::::::::::::::::::::::::::::::::::::::
[info] [warn]   ::              FAILED DOWNLOADS            ::
[info] [warn]   :: ^ see resolution messages for details  ^ ::
[info] [warn]   ::::::::::::::::::::::::::::::::::::::::::::::
[info] [warn]   :: javax.jms#jms;1.1!jms.jar
[info] [warn]   :: com.sun.jdmk#jmxtools;1.2.1!jmxtools.jar
[info] [warn]   :: com.sun.jmx#jmxri;1.2.1!jmxri.jar
[info] [warn]   ::::::::::::::::::::::::::::::::::::::::::::::

can't download com.sun.jdmk#jmxtools;1.2.1!jmxtools.jar

Error when enabling on a sub-project

SBT 0.13.7 with cached resolution enabled

The error is like this:

java.io.FileNotFoundException: C:\projects\my_project\my_sub_project\target\resolution-cache\reports\com.me.my_sub_project_2.11-compile.xml
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:131)
at scala.io.Source$.fromFile(Source.scala:90)
at scala.io.Source$.fromFile(Source.scala:75)
at scala.io.Source$.fromFile(Source.scala:53)
at com.zavakid.sbt.IvyGraphMLDependencies$.buildDoc(Util.scala:141)
at com.zavakid.sbt.IvyGraphMLDependencies$.graph(Util.scala:62)
at com.zavakid.sbt.SbtOneLog$$anonfun$projectSettings$7.apply(SbtOneLog.scala:111)
at com.zavakid.sbt.SbtOneLog$$anonfun$projectSettings$7.apply(SbtOneLog.scala:111)
at scala.Function1$$anonfun$andThen$1.apply(Function1.scala:55)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$4.work(System.scala:63)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:235)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:744)

actor name [localBrowser] is not unique

SBT 0.13.7 with cached resolution

When enabling on a Play project:

akka.actor.InvalidActorNameException: actor name [localBrowser] is not unique!
at akka.actor.dungeon.ChildrenContainer$NormalChildrenContainer.reserve(ChildrenContainer.scala:130)
at akka.actor.dungeon.Children$class.reserveChild(Children.scala:77)
at akka.actor.ActorCell.reserveChild(ActorCell.scala:369)
at akka.actor.dungeon.Children$class.makeChild(Children.scala:202)
at akka.actor.dungeon.Children$class.attachChild(Children.scala:42)
at akka.actor.ActorCell.attachChild(ActorCell.scala:369)
at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:552)
at com.typesafe.sbt.webdriver.SbtWebDriver$$anonfun$com$typesafe$sbt$webdriver$SbtWebDriver$$load$1.apply(SbtWebDriver.scala:64)
at com.typesafe.sbt.webdriver.SbtWebDriver$$anonfun$com$typesafe$sbt$webdriver$SbtWebDriver$$load$1.apply(SbtWebDriver.scala:59)
at com.typesafe.sbt.web.SbtWeb$.withActorRefFactory(SbtWeb.scala:441)
at com.typesafe.sbt.webdriver.SbtWebDriver$.com$typesafe$sbt$webdriver$SbtWebDriver$$load(SbtWebDriver.scala:58)
at com.typesafe.sbt.webdriver.SbtWebDriver$$anonfun$globalSettings$2$$anonfun$apply$2.apply(SbtWebDriver.scala:43)
at com.typesafe.sbt.webdriver.SbtWebDriver$$anonfun$globalSettings$2$$anonfun$apply$2.apply(SbtWebDriver.scala:43)
at scala.Function1$$anonfun$andThen$1.apply(Function1.scala:55)
at sbt.Project$.setProject(Project.scala:312)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:484)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$.process(Command.scala:92)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.State$$anon$1.process(State.scala:184)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.MainLoop$.next(MainLoop.scala:98)
at sbt.MainLoop$.run(MainLoop.scala:91)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)
at sbt.Using.apply(Using.scala:24)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
at sbt.MainLoop$.runLogged(MainLoop.scala:24)
at sbt.StandardMain$.runManaged(Main.scala:53)
at sbt.xMain.run(Main.scala:28)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:129)
at xsbt.boot.Launch$.run(Launch.scala:109)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:36)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:19)
at xsbt.boot.Boot$.runImpl(Boot.scala:44)
at xsbt.boot.Boot$.main(Boot.scala:20)
at xsbt.boot.Boot.main(Boot.scala)

build error under jdk 11

using jdk 8, build is ok; using jdk 11, build error.

Maybe upgrade sbt can resolve this problem.


using jdk 11, sbt build error info:

$ sbt clean
[warn] The global sbt directory is now versioned and is located at ~/.sbt/0.13.
[warn]   You are seeing this warning because there is global configuration in ~/.sbt but not in ~/.sbt/0.13.
[warn]   The global sbt directory may be changed via the sbt.global.base system property.
[info] Loading project definition from ~/sbt-one-log/project
[warn] The global sbt directory is now versioned and is located at ~/.sbt/0.13.
[warn]   You are seeing this warning because there is global configuration in ~/.sbt but not in ~/.sbt/0.13.
[warn]   The global sbt directory may be changed via the sbt.global.base system property.
[info] Updating {file:~/sbt-one-log/project/}sbt-one-log-build...
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by sbt.ivyint.ErrorMessageAuthenticator$ (file:~/.sbt/boot/scala-2.10.4/org.scala-sbt/sbt/0.13.7/ivy-0.13.7.jar) to field java.net.Authenticator.theAuthenticator
WARNING: Please consider reporting this to the maintainers of sbt.ivyint.ErrorMessageAuthenticator$
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$$anonfun$34.apply(TextAnalysisFormat.scala:334)
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$$anonfun$34.apply(TextAnalysisFormat.scala:334)
        at sbt.inc.FormatTimer$.aggregate(TextAnalysisFormat.scala:18)
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$.stringToObj(TextAnalysisFormat.scala:334)
        at sbt.inc.TextAnalysisFormat$APIsF$$anonfun$14.apply(TextAnalysisFormat.scala:212)
        at sbt.inc.TextAnalysisFormat$APIsF$$anonfun$14.apply(TextAnalysisFormat.scala:212)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$toPair$1(TextAnalysisFormat.scala:395)
        at sbt.inc.TextAnalysisFormat$$anonfun$sbt$inc$TextAnalysisFormat$$readPairs$1.apply(TextAnalysisFormat.scala:400)
        at sbt.inc.TextAnalysisFormat$$anonfun$sbt$inc$TextAnalysisFormat$$readPairs$1.apply(TextAnalysisFormat.scala:400)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.immutable.Range.foreach(Range.scala:141)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$readPairs(TextAnalysisFormat.scala:400)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$readMap(TextAnalysisFormat.scala:404)
        at sbt.inc.TextAnalysisFormat$APIsF$.read(TextAnalysisFormat.scala:224)
        at sbt.inc.TextAnalysisFormat$$anonfun$4.apply(TextAnalysisFormat.scala:75)
        at sbt.inc.TextAnalysisFormat$$anonfun$4.apply(TextAnalysisFormat.scala:75)
        at sbt.inc.FormatTimer$.aggregate(TextAnalysisFormat.scala:18)
        at sbt.inc.FormatTimer$.time(TextAnalysisFormat.scala:25)
        at sbt.inc.TextAnalysisFormat$.read(TextAnalysisFormat.scala:75)
        at sbt.inc.FileBasedStore$$anon$1$$anonfun$getUncaught$1.apply(FileBasedStore.scala:18)
        at sbt.inc.FileBasedStore$$anon$1$$anonfun$getUncaught$1.apply(FileBasedStore.scala:18)
        at sbt.Using.apply(Using.scala:24)
        at sbt.inc.FileBasedStore$$anon$1.getUncaught(FileBasedStore.scala:18)
        at sbt.inc.FileBasedStore$$anon$1.get(FileBasedStore.scala:16)
        at sbt.inc.AnalysisStore$$anon$1.get(AnalysisStore.scala:22)
        at sbt.inc.AnalysisStore$$anon$2.get(AnalysisStore.scala:28)
        at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:64)
        at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:45)
        at sbt.Compiler$.apply(Compiler.scala:74)
        at sbt.Compiler$.apply(Compiler.scala:65)
        at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:789)
        at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:781)
        at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:781)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$$anonfun$34.apply(TextAnalysisFormat.scala:334)
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$$anonfun$34.apply(TextAnalysisFormat.scala:334)
        at sbt.inc.FormatTimer$.aggregate(TextAnalysisFormat.scala:18)
        at sbt.inc.TextAnalysisFormat$ObjectStringifier$.stringToObj(TextAnalysisFormat.scala:334)
        at sbt.inc.TextAnalysisFormat$APIsF$$anonfun$14.apply(TextAnalysisFormat.scala:212)
        at sbt.inc.TextAnalysisFormat$APIsF$$anonfun$14.apply(TextAnalysisFormat.scala:212)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$toPair$1(TextAnalysisFormat.scala:395)
        at sbt.inc.TextAnalysisFormat$$anonfun$sbt$inc$TextAnalysisFormat$$readPairs$1.apply(TextAnalysisFormat.scala:400)
        at sbt.inc.TextAnalysisFormat$$anonfun$sbt$inc$TextAnalysisFormat$$readPairs$1.apply(TextAnalysisFormat.scala:400)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.immutable.Range.foreach(Range.scala:141)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$readPairs(TextAnalysisFormat.scala:400)
        at sbt.inc.TextAnalysisFormat$.sbt$inc$TextAnalysisFormat$$readMap(TextAnalysisFormat.scala:404)
        at sbt.inc.TextAnalysisFormat$APIsF$.read(TextAnalysisFormat.scala:224)
        at sbt.inc.TextAnalysisFormat$$anonfun$4.apply(TextAnalysisFormat.scala:75)
        at sbt.inc.TextAnalysisFormat$$anonfun$4.apply(TextAnalysisFormat.scala:75)
        at sbt.inc.FormatTimer$.aggregate(TextAnalysisFormat.scala:18)
        at sbt.inc.FormatTimer$.time(TextAnalysisFormat.scala:25)
        at sbt.inc.TextAnalysisFormat$.read(TextAnalysisFormat.scala:75)
        at sbt.inc.FileBasedStore$$anon$1$$anonfun$getUncaught$1.apply(FileBasedStore.scala:18)
        at sbt.inc.FileBasedStore$$anon$1$$anonfun$getUncaught$1.apply(FileBasedStore.scala:18)
        at sbt.Using.apply(Using.scala:24)
        at sbt.inc.FileBasedStore$$anon$1.getUncaught(FileBasedStore.scala:18)
        at sbt.inc.FileBasedStore$$anon$1.get(FileBasedStore.scala:16)
        at sbt.inc.AnalysisStore$$anon$1.get(AnalysisStore.scala:22)
        at sbt.inc.AnalysisStore$$anon$2.get(AnalysisStore.scala:28)
        at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:64)
        at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:45)
        at sbt.Compiler$.apply(Compiler.scala:74)
        at sbt.Compiler$.apply(Compiler.scala:65)
        at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:789)
        at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:781)
        at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:781)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
[error] (compile:compile) java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

scala-logging error with scala 2.11

with sbt scripted :

[info] error libraryDependencies [com.typesafe.scala-logging:scala-logging-api_2.11:2.1.2] error!
[info] [error] Total time: 0 s, completed 2015-3-6 23:45:03
[error] x sbt-one-log / simple_0.13.7
[error] {line 1} Command failed: check failed
java.lang.RuntimeException: Failed tests:
sbt-one-log / multi_0.13.7
sbt-one-log / simple_0.13.7

at scala.sys.package$.error(package.scala:27)
at sbt.test.ScriptedTests$.runAll(ScriptedTests.scala:119)
at sbt.test.ScriptedTests$.run(ScriptedTests.scala:114)
at sbt.test.ScriptedTests$.run(ScriptedTests.scala:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sbt.ScriptedPlugin$$anonfun$scriptedTask$1$$anonfun$apply$3$$anonfun$apply$4.apply(ScriptedPlugin.scala:61)
at sbt.ScriptedPlugin$$anonfun$scriptedTask$1$$anonfun$apply$3$$anonfun$apply$4.apply(ScriptedPlugin.scala:57)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$4.work(System.scala:63)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.