blob: 8a38ee4aa2c4778760cc04d5eaa52dfe662d2af2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
sources=$(wildcard src/*.scala)
main=Main
all: target/library.jar
# contains jars of all dependencies (including transitive ones)
target/dependencies.list: Maven.list
mkdir -p target
coursier fetch $(shell sed '/^#/d' Maven.list) > $@
# concatenate dependencies to be parseable as a classpath argument
target/classpath.line: target/dependencies.list
paste --serial --delimiters ':' $^ > $@
# compile scala source files (note that a stamp file is used, since
# many classfiles may be created per source file)
target/classfiles.stamp: $(sources) target/classpath.line
mkdir -p target/classfiles
scalac \
-d target/classfiles \
-cp $(shell cat target/classpath.line) \
-target:jvm-1.8 \
$(sources)
touch target/classfiles.stamp
# bundle classfiles into a jar
target/library.jar: target/classfiles.stamp
jar cf $@ -C target/classfiles .
# combine lirary jar with all dependencies to produce a fat jar
target/application.jar: target/library.jar target/dependencies.list
mkdir -p target
scripts/combinejars $@ $(shell cat target/dependencies.list) $<
# inject a startup script to the fat jar, producing an executable
target/application: target/application.jar
echo "#!/bin/sh" > target/application
echo 'exec java -cp $$0 $(main) "$$@"' >> target/application
cat target/application.jar >> target/application
chmod +x target/application
# run the application
run: target/application.jar
@java -cp $< $(main)
# format source files
fmt:
scalafmt $(sources)
clean:
rm -rf target
.PHONY: clean all
|