Hi,
Am Montag, 4. Juli 2011 09:14:01 UTC+2 schrieb [email protected]:
> Thanks for everyone's suggestions and comments!
>
> Some remarks:
>
> Gradle/clojuresque: I never tried them, but it looks like I should!
>
> AOT compilation: My case is probably a bit complex in this respect. I
> need AOT compilation only because I want to produce an executable jar,
> so there is at least one namespace that must be AOT compiled. For
> building that executable jar, it doesn't matter if everything else is
> AOT compiled as well. But I want to be able to build a standard
> library jar with just the Clojure code to make sure it works with
> future Clojure releases. One solution would be to have two completely
> different builds, one for the executable jar and one for the library
> version, but using the same set of source code files.
I would do it like this:
Split the source in two parts: the library part and the application
part. This would help to maintain a clean library API, because you
could use your application as “real” customer. You could build both
parts independently if desired and so on.
On the other hand this is not a requirement. You could just as well
have everything in one tree and create two jars from it. But my
gradle-fu is too limited to suggest a quick solution for that way.
First the former way the source layout would be something like this:
root directory of the project
│
├─ build.gradle (see below)
│
├─ lib
│ │
│ ├─ build (clojuresque, other stuff needed for buildscript)
│ │
│ └─ runtime (your dependencies go here)
│
├─ library (library subproject)
│
└─ app (application subproject)
You need only the following central build.gradle. It will build a
normal library jar for the library subproject and a AOT-compiled
jar for the application.
buildscript {
repositories { flatDir dirs: project.file('lib/build') }
dependencies { classpath "clojuresque:clojuresque:1.4.1" }
}
subprojects {
apply plugin: "java"
apply plugin: "clojure"
group = "yourGroupGoesHere"
version = "some.version.number"
repositories {
flatDir dirs: project(':').file('lib/runtime').absoluteFile
}
dependencies {
compile "org.clojure:clojure:1.2.1"
}
}
project(':library') {
dependencies {
compile "some.other:library:1.2.3"
compile "and.another:one:3.2.1"
}
}
project(':app') {
aotCompile = true
// If you want a fat jar with all dependencies included...
uberjar.enabled = true
configurations.compile.transitive = true
dependencies {
compile project(':library')
}
// more stuff here for main class definition etc.
}
Although not completely working out of the box this should give
you a feeling of how things would look like with gradle. So you
can hopefully quickly evaluate whether it is worth a look at all.
I'm open for any support request to get you going with clojuresque.
Mail me or put the discussions on the newly created google
group: http://groups.google.com/group/clojuresque.
Sincerely
Meikel
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en