How to add Java JAR files to Grails project?

2019-03-18 03:07发布

问题:

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?

回答1:

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



回答2:

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

grails compile --refresh-dependencies

After what it worked.



回答3:

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 will be runtime instead of compile)

Hope it helps,



回答4:

Grails refresh-dependency, clean etc. didn't work for me. What worked for me was exiting Grails daemon and starting Grails again.