Fork me on GitHub
#boot
<
2015-12-18
>
seancorfield00:12:48

Hmm, so I created seancorfield/boot-expectations by copying bits of boot-test (thank you!). And I ran boot pom jar install and it seems to have put an appropriate JAR file into my local .m2/repository. I can add it as a dependency to my scratch project's build.boot and I get no errors when I do boot repl but as soon as I add a require for it, I get an error that boot_expectations.clj can't be found... I must be doing something stupid but I can't see it 😞

seancorfield00:12:09

Here's what I have in my build.boot file in the scratch project: `

seancorfield00:12:27

Bah, don't have Slack configured right

seancorfield00:12:55

(set-env!
 :resource-paths #{"src"}
 :source-paths #{"test"}
 :dependencies '[[org.clojure/clojure "1.8.0-RC4"]
                 [seancorfield/boot-expectations "0.1.0-SNAPSHOT" :scope "test"]])

(require '[seancorfield/boot-expectations :refer :all])

seancorfield00:12:02

And I thought my ns was right in boot_expectations.clj:

(ns seancorfield.boot-expectations
  {:boot/export-tasks true}
  (:require [boot.core :as core]
            [boot.pod :as pod]))

alandipert00:12:54

looks like (require '[seancorfield/boot-expectations :refer :all]) should be (require '[seancorfield.boot-expectations :refer :all])

alandipert00:12:09

(happens to me frequently also!)

alandipert00:12:40

btw is today only your first day of booting and you made a test task? i think this is a new record, congrats 🏆 😄

micha00:12:46

@seancorfield: the testsare run in a separate pod, remember

micha00:12:57

so your repl isn't going to affect that

micha00:12:18

if you're in the repl and you want to run tests you can do that also, but directly via clojure.test

alandipert00:12:56

how is incremental compile time in boot-cljs compared to cljsbuild these days, anyone have recent experience with both?

seancorfield00:12:17

Argh! I can't believe I got that wrong again...

seancorfield00:12:18

I'm so not used to having a require that isn't in ns that I just don't make the right mental shift, esp. when I'm writing dependencies in code as well instead of a project map!

danielsz00:12:45

@seancorfield: You're doing great. Nice task you wrote there. Mental shift will follow by itself.

danielsz01:12:05

@micha: I tried the 2.5.1-snapshot. Everything looks good from my end.

micha01:12:38

awesome i think we're ready to make it official, eh?

micha01:12:52

we can always make 2.5.2 anyway lol

danielsz01:12:54

I'd say yes simple_smile

micha01:12:04

ok we (doit)

danielsz01:12:25

lisp can do it.

seancorfield01:12:59

Thanks @danielsz ! Also thanks to @alandipert for spotting my stupid mistake!

seancorfield01:12:47

I'll get it up on Clojars "soon", once I've figured out boot push simple_smile

seancorfield01:12:09

(that will likely be easier on OS X than Windows)

danielsz01:12:35

Please let us know if something is missing. Brand new wiki page.

danielsz01:12:17

👍 🍻🥥 (not necessarily in that order)

jgdavey01:12:43

Does github take a bit to propogate the release jar?

micha01:12:58

yeah my house internet is sloooow

danielsz01:12:00

boot -u. It's already there.

micha01:12:01

it's uploading

jgdavey01:12:35

Interestingly, boot -u updated to 2.5.1, but now can’t… boot

jgdavey01:12:25

The difference between a tag check and the release jar, perhaps?

danielsz01:12:49

@jgdavey: Yeah, I'm seeing this too.

jgdavey01:12:03

That is, does boot -u use the latest release tag?

micha01:12:07

yeah the problem is that boot.jar is in github

micha01:12:16

and it's not uploaded yet

micha01:12:23

it almost is

danielsz01:12:30

haha. I'm too impatient.

micha01:12:32

i shoudl have uploaded that first

micha01:12:38

race condition this way

jgdavey01:12:55

So did we win the race? 😉

micha01:12:59

ok try now!

seancorfield01:12:21

@danielsz: Followed those instructions and I get missing jar file or repo not found...

seancorfield01:12:54

Presumably some additional options need to be set that are not shown on that page?

micha01:12:00

there was a but that was fixed in 2.5.1 there

micha01:12:07

can you do boot -u and try?

micha01:12:00

oh sorry, you need to make the jar too, boot doesn't keep any state between invocations

danielsz01:12:36

@seancorfield: If upgrading boot doesn't fix it, please git push your build.boot to the github repo so we can look at it.

danielsz01:12:47

@seancorfield: Also, you can look at a working build.boot to see what you need. Here's one: https://github.com/danielsz/boot-runit/blob/master/build.boot

seancorfield01:12:15

So boot jar push? Or boot pom jar push?

micha01:12:30

boot doesn't keep state between runs

micha01:12:45

so you need to build the thing and then compose with push

seancorfield01:12:06

What set of tasks are needed to push then?

micha01:12:21

well whatever you need to do to create the jar with the pom in it

micha01:12:27

so like for instance

seancorfield01:12:33

I tried boot pom jar install push and still get that message

micha01:12:44

that looks legit to me

micha01:12:03

can you paste build.boot?

micha01:12:17

it depends how you configured those tasks with task-options!

seancorfield01:12:07

I assume I'd want my Clojars credentials in project.boot and then .gitignore that?

micha01:12:47

the page danielsz linked demonstrates a few options for managing credentials

seancorfield01:12:05

I read that and followed the instructions.

micha01:12:16

the push task requires the :repo option

micha01:12:21

where you tell it which repo to push to

micha01:12:38

(task-options! push {:repo "clojars"}) is what you want i think

micha01:12:51

clojars is included by default

micha01:12:28

and you'll need your :username and :password for that repo

micha01:12:43

i recommend using configure-repositories! to achieve that

seancorfield01:12:54

Here's the project.boot file (with credentials xxx'd):

(task-options! push {:repo "clojars"})

(set-env! :repositories [["clojars" {:url ""
                                     :username ""
                                     :password "xxxx"}]])

micha01:12:11

yep that's fine

micha01:12:17

"profile.boot" though

seancorfield01:12:19

That's following the wiki page.

micha01:12:31

oh maybe typo on the page

seancorfield01:12:33

Hah, stupid attacks again!

micha01:12:42

💥 congratulations!

danielsz01:12:44

👍:skin-tone-3:

seancorfield01:12:12

So why is the project-specific boot file called profile.boot?

micha01:12:32

it's sort of like the leiningen profile.clj

micha01:12:46

it is evaluated before the build.boot

micha01:12:50

in the same environment

micha01:12:02

and it's not usually part of the project in scm

seancorfield01:12:16

Well, having the global one be profile.boot makes sense...

seancorfield01:12:48

I read the docs and my brain said "Ah, project.boot! That makes sense!"

micha01:12:02

interesting, yeah that makes sense

micha01:12:06

names are not easy

seancorfield01:12:12

Hopefully I'll only make that mistake twice simple_smile

seancorfield01:12:38

(hey, I made the / / . mistake twice in 24 hours!)

micha01:12:09

you can put (when (.exists (io/file "project.boot")) (load-file "project.boot")) in your global profile.boot...

micha01:12:33

and then you can use project.boot instead of profile.boot

micha01:12:41

it would do exactly the same thing

seancorfield01:12:20

OK, I'll consider Day 2 with Boot to be successful as well. Thank you!

micha01:12:56

did you add your task to the wiki? simple_smile

micha01:12:35

that list is getting long!

seancorfield02:12:30

And now I'm off for dinner with my wife (she got home from surgery yesterday so I've been on vacation looking after her).

micha02:12:06

good luck, see you later!

danielsz02:12:21

good work, @seancorfield, and good recovery to your wife.

seancorfield02:12:56

Thanks. She's doing really well. Full hysterectomy on Monday, home Wednesday, staples out Friday. Much faster than we expected!

micha02:12:52

good news simple_smile

alandipert02:12:03

@seancorfield: btw your lein frege plugin is pretty ripe for a boot task! i've only dabbled with langs like that but i did make a task for one, https://github.com/alandipert/boot-yeti/tree/master/example

alandipert02:12:33

found ML more palatable with a live reload dev flow

seancorfield03:12:11

Does Boot have the equivalent of Leiningen's templates?

micha03:12:51

we use lein templates

micha03:12:14

with boot we think there is a way to make composable templates, but work hasn't really progressed there

micha03:12:40

so other than that there isn't much to gain that isn't already working fine in lein templates

seancorfield03:12:42

In response to Alan's comment, it would be weird to have a Leiningen template for a Frege project that then expected you to use Boot to build/run it simple_smile

seancorfield03:12:24

But I will say that I suspect a Boot task for Frege would be a lot easier to write than the Leiningen plugin for it...

micha03:12:36

that's an interesting point though

micha03:12:48

about how the number of tools involved is a factor

micha03:12:11

it might be worthwhile to wrap the lein templates implementation in a boot task for that reason

alandipert04:12:06

@seancorfield: clearly what we need is a lein template... that also installs boot for you

seancorfield04:12:37

@micha: You'd need it to be a built-in so once you have Boot installed, you could just say boot new mytemplate myapp

alandipert04:12:22

it wouldn't necessarily need to be built in... since deps with tasks in them can be added at the cli... at least if it's brevity we're optimizing for

alandipert04:12:46

boot -d boot/new -t mytemplate -a myapp

seancorfield04:12:00

Ah, good point. Still haven't gotten used to that aspect of Boot yet simple_smile

seancorfield04:12:36

So it would need to be a version of lein-new that looks for {name}/boot-template...

seancorfield04:12:54

(although I guess it could look for both?)

alandipert04:12:55

or perhaps it uses lein templates, by running lein core in a pod

micha04:12:18

that would be pretty cool, i can imagine people making dual-purpose templates

seancorfield04:12:10

So we might have a world with {name}/boot-template and {name}/lein-template and either/both could generate projects with project.clj and/or build.boot... that's certainly an interesting possibility.

andrewboltachev05:12:16

Hi. Is there any quick documentation for filesets? simple_smile

micha06:12:41

np, hope it helps!

andrewboltachev06:12:37

What I want to achieve is basically a TDD loop, or even more general thing like this: 1. Read arguments and prepare stuff, remember obtained data (call this "data") 2. On each file change (I'll be changing one data structure [call this "grammar"] which affects the results): 2.1 Apply "grammar" to "data" 2.2 Obtain (say, print out) the results

andrewboltachev06:12:50

Operation (1) takes time (so does the (2.1) also in fact), and I don't want (1) to be run each time I change files

seancorfield06:12:46

@micha: When that Filesets page talks about Jcp, it says it's the immutable classpath, but it seems like you can (set-env! :dependencies fn-that-adds-new-libs) so the Jcp can differ before and after a task?

seancorfield06:12:00

Am I misunderstanding what the page means?

seancorfield06:12:41

(I notice it also talks about emitting files to the target directory -- which I guess is deprecated now?)

martinklepsch07:12:16

@andrewboltachev: tasks can have maintain state over multiple runs. Take a look at the tasks page, I think there is an example like that

andrewboltachev07:12:03

ok thanks @martinklepsch Reading docs from beginning to end now

martinklepsch08:12:53

@andrewboltachev: just checked, there seems to be no such example

martinklepsch08:12:51

@andrewboltachev: the alternative is to put it inside a let that closes over with-pre-wrap or the likes as done here: https://github.com/adzerk-oss/boot-cljs/blob/master/src/adzerk/boot_cljs.clj#L196

andrewboltachev08:12:48

thanks @martinklepsch I'll check it out

shwx8411:12:22

Has anyone gotten boot to work with travis? I'm trying to set it up for my project, but the process gets killed while fetching boot dependencies.. I'm guessing due to resource usage.

martinklepsch11:12:57

@shwx84: are there no reasons provided by travis?

shwx8411:12:56

/home/travis/build.sh: line 45: 2000 Killed ./boot test-prof test

shwx8411:12:17

Here is the full commands / output if it is helpful: https://travis-ci.org/wicdmedia/halcyon

shwx8411:12:15

saw that boot-cljs-example used oraclejdk8, so I switched to that. Looks like that solved the problem

shwx8412:12:40

or perhaps just bad luck. Tried the old build for the third time, and it works now too.

micha14:12:25

@shwx84: CI hosts might be configuring java to use very little memory by default

micha14:12:04

we've found that it helps to specify BOOT_JVM_OPTIONS=-Xmx256m or something like that

micha14:12:08

@seancorfield: J_cp is called the "immutable classpath" there, but i guess it should really say "append only" or something

micha14:12:32

Java considers any jar on the classpath to be immutable, and you can't remove jars from a classloader

micha14:12:57

so if you go in and modify a jar that's already loaded into a classloader one of two things will happen: either the jar contents have already been read and cached and the modification will have no effect on the running JVM, or the JVM will segfault

nha14:12:48

When doing a boot plugin, what is the way to require a dependency ?

micha14:12:16

@nha: the best way is to make a pod and add the dependency to the pod's environment when you create it

micha14:12:25

then do your work in the pod

micha14:12:36

this keep the project classpath clean

nha14:12:50

@micha I think I get the idea. Thanks simple_smile

micha15:12:43

for example

robin16:12:27

Hello booties, I have a question.

robin16:12:57

Is it possible to change the output from target/main.js to something else?

jaen16:12:55

Just make a cljs.edn file under an appropriate path - https://github.com/adzerk-oss/boot-cljs#multiple-builds

robin16:12:55

What does edn stand for?

danielsz16:12:56

extensible data notation

robin16:12:40

Would be good if that was documented on boot-cljs.

robin16:12:58

Thought it was something that adzerk made up.

jaen16:12:07

Well, I guess it's just too obvious for people that are doing Clojure for a while that EDN is Clojure notation as a formalised file format and they didn't think it might not be.

robin16:12:24

Don't leave the noobs behind man, they want to be pro one day too.

robin16:12:07

Lemme try to edn this thing to work.

jaen16:12:35

Yeah, I can imagine; it's just that someone probably thought it's a thing an introduction to Clojure would talk about and didn't think to re-iterate that, like no-one would think to explain what a defn is in a readme for a machine learning library for Clojure.

jaen16:12:47

But in general I agree it can be non-obvious if you don't know what that is.

erlis16:12:01

I need help with boot in windows. After downloading boot.exe and copying it on my c:\windows\system32 folder when I run boot -h I got Error: Could not find or load main class boot.Loader

erlis16:12:29

any idea why?

robin16:12:48

Man google really needs to crawl this place.

jaen16:12:01

@robin: if it's your first time with Clojurescript, then maybe this could be helpful - https://github.com/magomimmo/modern-cljs/tree/master/doc/second-edition - walks you through creating a Clojurescript project with boot from A to Z.

robin16:12:41

No time, got apps to write, things to boot, i kinda work backwards, it's how i roll.

jaen16:12:05

Hahah, I can understand that. I kinda do it that way as well.

magomimmo16:12:05

@jaen: I’ll do my best to keep going…thanks

micha16:12:52

@erlis: are you sure you're getting the right boot.exe? like perhaps there is another one in your PATH?

erlis16:12:10

let me check

jaen16:12:49

I've just recently learned there's where something in Windows which is equivalent to which something on nixes.

erlis16:12:14

the reason I believe is that c:\windows\system32 is not the right folder

erlis16:12:20

this is 64 bits machine

erlis16:12:53

executing boot.exe from the folder where it exists does the right thing

erlis16:12:14

let me see where I should copy this file in a 64 bits Win 7

erlis16:12:23

hate windows!

jaen16:12:05

@magomimmo: yeah, it's a nice thing to be able to show people that start out with Clojure. Explaining how a build tool setup works step by step can be immensely helpful. I'm not entirely sold on introducing people to things like domina, but otherwise it's really solid.

jaen16:12:53

Heh, I remember boot being a bit problematic to set up on Windows. I think it worked in the end, but not sure what had to be done.

robin16:12:09

Just gotta write things down.

erlis16:12:26

I'm trying to write my .Net build script with boot

erlis16:12:38

but not sure if I'll have success

robin16:12:42

Every clojure project could use more docs.

erlis16:12:56

I guess I'll be around for a while

jaen17:12:23

I dunno, Clojure projects feel better documented than Java projects, for me at least.

robin17:12:44

I will be here for a while too! In lein, I would set :output-to somewhere in project.clj, but for boot Jaen adviced me to create a blah.cljs.edn somewhere, but what should contain in that file?

jaen17:12:06

Generally you need to put it somewhere on the classpath

jaen17:12:16

I usually like to put it in the resources folder.

jaen17:12:30

if you do

erlis17:12:39

guys problem solved for boot.exe in windows 64 bits

erlis17:12:57

I just moved the boot.exe into my `c:\windows

erlis17:12:02

not system32

jaen17:12:22

create a file at resources/public/assets/javascripts/application.cljs.edn then you will get target/public/assets/javascripts/application.js as your output.

erlis17:12:41

c:\windows is in the PATH as %SystemRoot%

erlis17:12:29

copying the file into system32 will cause that file to be copied instead to a WOW64 folder and is not found, maybe the PATH doesn't contains that weird folder

erlis17:12:41

anyway, this is working now.

magomimmo17:12:47

@jaen: in 2012 domina was almost the only dom lib available. but in next tutorials I’ll show the react wrapper…my intention is to show react native as well

jgdavey17:12:00

I’ve got an interesting issue with boot uber in a current project. One dependency uses a folder for licenses (called license), and others use LICENSE with the text directly in it. boot uber in 2.4.x used to issue a warning about an non-empty directory, but with 2.5 it is now erroring-out with java.nio.file.DirectoryNotEmptyException

jgdavey17:12:14

I cleared the ~/.boot/cache folder just to be sure

robin17:12:20

What if I want the output to be somewhere completely elsewhere but still within the project?

jaen17:12:48

Depdens on where "elsewhere" is.

robin17:12:54

Instead of target/main.js, I want it to be static/custom.js

jaen17:12:01

If "outside the target directory" I'm not sure if you can.

magomimmo17:12:06

@jaen: i really don’t know a bit about windows. I don’t even remember when it was the last time I used it at a customer site, something close to 20 years ago

robin17:12:47

But good job erlis, getting clojure working on windows, I can't even get things working properly on linux!

robin17:12:37

Well then, I guess I have to discard today's effort and move back to lein and figure out why my extern isn't working!

micha17:12:47

@erlis: so the docs should be updated to point to C:\windows?

micha17:12:57

or does it depend on the version of windows?

micha17:12:23

or maybe should the docs have %SystemRoot% there?

jaen17:12:32

@magomimmo: yeah, I can understand why you chose domina originally, I'm just wondering if keeping it in a modern tutorial can be a bad idea, since it would suggest people it's a good way to create applications in Clojurescript, which it isn't. As for Windows - it wasn't directed at you, sorry for confusion.

jaen17:12:03

@robin: what's so bad about having this directory under target as target/static?

robin17:12:40

I'm integrating clojurescript with python/django

robin17:12:08

And it has to be that way, if I want less pain in my life

jaen17:12:19

then why not make your static your target dir?

robin17:12:29

and how do I do that?

jaen17:12:51

You're using boot 2.4.2 or 2.5.0? I think it changed somewhat recently.

magomimmo17:12:17

@jaen: the only good thing of using domina in the tutorial, is that is pretty easy to understand and you can an idea about cljs without the complexities of other advanced features of the language

robin17:12:24

2.5.1 I'm using

martinklepsch17:12:24

@robin: you can change the :target-path (defaults to target/)

martinklepsch17:12:40

(set-env! :target-path "static")

robin17:12:07

that looks straight forward, if only it was documented

robin17:12:12

lemme try

jaen17:12:38

@martinklepsch: wasn't there something about a target task for > 2.5.0 menioned recently?

martinklepsch17:12:18

@jaen: yes. in the future the fileset will not be synced to a target dir by default but instead this will be handled by tasks

martinklepsch17:12:01

@jaen: but with 2.5.* the implicit target behavior is still present

jgdavey17:12:51

@martinklepsch @micha Any thoughts about the uber task problem I mentioned above? I don’t really care if all the tasks have embedded licenses in the jar I’m building anyway. I’d sift them out if I could

robin17:12:18

Ah so it is documented, what I really meant was, I googled for "boot cljs change target main.cljs" and got nothing direct.

robin17:12:26

That worked martin, thankkkkkkkkkks. Now how do I rename main.js to something else?

martinklepsch17:12:34

@jgdavey: certainly sounds like something that should get fixed. Have you tried using the uber tasks exclude option?

martinklepsch17:12:50

@robin: the js file will have the same name as the cljs.edn file

jaen17:12:55

@robin: like I mentioned, do the cljs.edn thing; your output will have the same name and relative path it has.

jgdavey17:12:05

!!! I missed the exclude option somehow

martinklepsch17:12:26

@jgdavey: be sure to copy the default from the docstring, I think otherwise it's reset

martinklepsch17:12:56

@jgdavey: and probably good to log an issue simple_smile

mathiasx17:12:20

off-topic: hi @jgdavey ! simple_smile

jgdavey17:12:25

@jaen I’d definitely be open to a pull request

jgdavey17:12:34

@mathiasx: well hello there simple_smile

martinklepsch17:12:41

@jaen: while an out option might be slightly more convenient this could also easily be achieved with sift

martinklepsch17:12:54

I think more people should know about/use sift 😛

micha17:12:23

it's not ridiculously slow anymore (tm)

jaen17:12:48

@jgdavey: ok, let me push it. I imagine you want to keep "target/assets" as the default path?

jgdavey17:12:15

Yes. The current default path should stay the same.

jgdavey17:12:38

I hadn’t considered configuring it from that side because middleman itself allows nested directories, but it’s a good idea

robin17:12:39

looks like my edn file can't just be blank

robin17:12:09

I just require blank

jgdavey17:12:12

I got uber to work. I had to change the default exclude on uber to add #"(?i)^META-INF/LICENSE$” and #"(?i)^LICENSE$”

jgdavey17:12:07

Should those be default, are there rules about including license files in jars?

micha17:12:29

@jgdavey: that's a bug i think

micha17:12:38

can you open a ticket on boot please?

micha17:12:53

the issue is that in a jar you can have a folder and a file with the same name

micha17:12:58

because folders don't really exist

jgdavey17:12:01

yep! exactly!

micha17:12:03

kind of like s3

micha17:12:18

we need to check for that in the merge strategy

jgdavey17:12:25

Yes, and immutant has a folder called license that conflicts

micha17:12:54

not sure what the best way to solve that is, but a ticket would be a good start simple_smile

jaen17:12:07

@robin: you have to require your main namespace there IIRC. Something like:

{:require  [your.namespace]}
is probably the minimal example.

robin17:12:20

Oh I just put in an empty hash {}. And it works.

martinklepsch17:12:37

@robin: take a look at the example in the readme, to be on the save side :require should be specified

robin17:12:43

But what am I requiring?

robin17:12:57

Just {:require []} ?

robin17:12:20

Oh ok jaen

jaen17:12:34

Also a good idea is to use :init-fns [your-namespace/your-init-fn!] to call a function that initialises your application, but that is not required.

martinklepsch17:12:50

@robin: see the readme of boot-cljs

robin17:12:00

Yeah I read the readme, the foos and bars put me off.

robin17:12:33

like how do I know what files these baz and bars are really refering to.

jaen17:12:37

{:require [what.would.you-like.instead?]}?

jaen17:12:48

It refers to your namespaces.

robin17:12:04

but I get the idea after your explanation

jaen17:12:15

If your application has it's entry point at my.awesome-application.main then you put that there.

jaen17:12:20

Ok, good ; d

robin17:12:51

Plus that is under 'multiple builds' section, so I thought it wasn't relevant

jaen17:12:40

Yeah, I can imagine how this can be a bit misleading. IMO showing that you can rely on an implicit cljs.edn is probably a so-so idea.

martinklepsch17:12:18

@jaen: I agree about the implicit cljs.edn thing. I think we should transition to implicit + warning and explicit later

robin17:12:52

Thanks jaen and martin. Oh I also saw martin's video on youtube, that "lein new tenzing myproj" in the end really helped me to get boot going correctly.

erlis17:12:37

@micha I think the docs should be updated to something like "copy the boot.exe to a folder on your PATH, i.e.: your %SystemRoot% folder."

robin17:12:14

very good, maybe you will be happy to hear that i'm inching towards ditching lein your competitor.

erlis17:12:31

what I discovered is that system32 folder in 64 bits machine is not the folder I though it was. http://stackoverflow.com/a/1855051

robin17:12:45

@erlis you should put it in your blog and make sure you put a lot of ads

robin18:12:48

Then 3 months later, it would be wrong! But at least you get a few cents in ad revenue.

micha18:12:40

@erlis: thanks, i'll update the README

robin18:12:37

Alright I'll stop messing about, I don't want to get banned. I appreciate all your help. I'll blog positive things.

erlis18:12:01

@robin why should I do that? I just want to help others

robin18:12:58

yeah blog about your solution to your problem, that helps other

robin18:12:01

just somewhere that google can crawl over. so people like me who treat google like siri can find answers

tcrawley18:12:11

jgdavey: which immutant jar has a license/ in it?

jgdavey19:12:21

@tcrawley: I was mistaken. It was netty that contains a license folder

micha19:12:02

@jgdavey: thanks for making the ticket!

jgdavey19:12:11

:thumbsup: you’re welcome!

tcrawley20:12:29

@jgdavey: ah, cool, thanks. I was concerned for a minute :)

micha20:12:06

@tcrawley: what do you think boot should do in this case? prefer the folder i guess?

micha20:12:19

it's kind of a pickle

tcrawley20:12:40

it is a pickle, yeah

tcrawley20:12:49

maybe prefer the folder and log a warning?

micha20:12:36

yeah, and perhaps either modify the default merge fn to check if the args are input streams or directories, and handle the logging in the mergefn?

micha20:12:48

or make a different mergefn for this case

micha20:12:06

maybe a separate fn to merge these cases is the thing we want

micha20:12:41

i guess people can use sift to move things around to avoid the warning

micha20:12:46

or correct the problem

tcrawley20:12:01

yeah, that's true - sift would be nifty for that

micha20:12:08

the mergefn currently expects input streams and output stream

tcrawley20:12:29

ah, right. it only knows how to merge "files"

micha20:12:45

ok cool preferring the folder is probably what most people will want anyway

micha20:12:42

for boot 3.0.0 we could use nio Path objects instead of java.io.File

micha20:12:58

then we could make a filesystem that could accomodate this case

micha20:12:11

in-memory even

tcrawley20:12:17

that would be sweet

martinklepsch20:12:13

@micha: wouldn't sift be useless in that case because the jars are all exploded during uber?

micha20:12:35

yeah sift works on files, which these weird things aren't really