Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add Java JAR files to Grails project?

I have a few Java/Maven projects that I want to use in a Grails 2.0.4 project. I have tried various approaches, such as:

  1. Installing the JAR files in my local maven repository, and executing grails install-dependency com.foo:my-project:0.0.1-SNAPSHOT
  2. Copying the JAR files into the lib folder of grails.
  3. Adding compile com.foo:my-project:0.0.1-SNAPSHOT to the dependencies section of BuildConfig.groovy
  4. Uncommenting mavenLocal() and passing /home/me/.m2/repository

I may have tried a few other things, such as superstitiously throwing in a grails clean whenever convenient. In every case grails compile yields the following result: compilation fails, unable to resolve every reference to any of the classes in either of the JARs.

Any idea what I'm missing?

like image 569
Eric Wilson Avatar asked Jun 26 '12 20:06

Eric Wilson


3 Answers

Putting the jar in the lib folder should do the trick. We are using the same approach currently without problems.

like image 103
Marco Avatar answered Nov 15 '22 15:11

Marco


If Grails by default don't take the local .jar libraries located in <GRAILS-APP-DIR>/lib (seems that with Grails 3.X the /lib folder default configuration is removed) the easy way to enforce it is modifying build.gradle to add a local directory dependency for it.

For almost all cases is of course better to use the maven repos, however it's possible to have some db-vendor-drivers or other libraries which aren't in a public repo. To do so for this libraries modify the <GRAILS-APP-DIR>/build.gradle and add something like:

dependencies {
    ...
    compile fileTree(dir: './lib', include: ['*.jar'])
    ...
}

If you want you can use another directory (not /lib) since you're specifying it. Of course use the correct scope (for example for db-vendor-drivers which probably already are in your application container class path the scope in gradle will be runtime instead of compile).

UPDATE

Starting from gradle 7.0 use of compile and runtime are removed. Insted you can use compileOnly, runtimeOnly or implementation depending if you want to put the dependency only in the complie classpath, runtime classpath or on both, in gradle 7.0 and above you can use :

dependencies {
    ...
    implementation fileTree(dir: './lib', include: ['*.jar'])
    ...
}
like image 27
albciff Avatar answered Nov 15 '22 17:11

albciff


Adding the jar to the "lib" folder wasn't enough for me. I had to run:

grails compile --refresh-dependencies

After what it worked.

like image 9
Henri Lapierre Avatar answered Nov 15 '22 17:11

Henri Lapierre