Using Apache's example, I am trying to load Apache POI into my Grails app. I have GGTS (an Eclipse clone setup for Grails development) as my IDE. When I try to create a new HSSFWorkbook object like so:
HSSFWorkbook workbook = new HSSFWorkbook()
, The IDE tells me unable to resolve class HSSFWorkbook. How do I properly set up Apache POI so that it works in Grails 2.3.11? I have to work with Excel files and the Apache POI gives me more control. I've seen it working in another Grails 2.3.11 app so I know it's possible. I prefer latest version supported in Grails 2.3.11.
BuildConfig.groovy
grails.servlet.version = "3.0" // Change depending on target container compliance (2.5 or 3.0)
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.work.dir = "target/work"
grails.project.target.level = 1.6
grails.project.source.level = 1.6
grails.server.port.http=8070
//grails.project.war.file = "target/${appName}-${appVersion}.war"
grails.project.fork = [
// configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
// compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
// configure settings for the test-app JVM, uses the daemon by default
test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
// configure settings for the run-app JVM
run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
// configure settings for the run-war JVM
war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
// configure settings for the Console UI JVM
console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]
grails.project.dependency.resolver = "maven" // or ivy
grails.project.dependency.resolution = {
// inherit Grails' default dependencies
inherits("global") {
// specify dependency exclusions here; for example, uncomment this to disable ehcache:
// excludes 'ehcache'
}
log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
checksums true // Whether to verify checksums on resolve
legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility
repositories {
inherits true // Whether to inherit repository definitions from plugins
grailsPlugins()
grailsHome()
mavenLocal()
grailsCentral()
mavenCentral()
// uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
//mavenRepo "http://repository.codehaus.org"
//mavenRepo "http://download.java.net/maven/2/"
//mavenRepo "http://repository.jboss.com/maven2/"
}
dependencies {
// specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
// runtime 'mysql:mysql-connector-java:5.1.27'
// runtime 'org.postgresql:postgresql:9.3-1100-jdbc41'
test "org.grails:grails-datastore-test-support:1.0-grails-2.3"
runtime 'org.codehaus.groovy:groovy-all:2.4.7'
runtime 'org.apache.poi:poi:3.14'
runtime 'org.apache.poi:poi-ooxml:3.14'
}
plugins {
// plugins for the build system only
build ":tomcat:7.0.54"
// plugins for security
compile ':spring-security-core:2.0.0'
compile ':spring-security-ldap:2.0.0'
// plugins for the compile step
compile ":scaffolding:2.0.3"
compile ':cache:1.1.7'
// plugins needed at runtime but not for compilation
runtime ":hibernate4:4.3.5.4"
runtime ":database-migration:1.4.0"
runtime ":jquery:1.11.1"
runtime ":resources:1.2.8"
runtime ':console:1.5.12'
// Uncomment these (or add new ones) to enable additional resources capabilities
//runtime ":zipped-resources:1.0.1"
//runtime ":cached-resources:1.1"
//runtime ":yui-minify-resources:0.1.5"
// An alternative to the default resources plugin is the asset-pipeline plugin
//compile ":asset-pipeline:1.6.1"
// Uncomment these to enable additional asset-pipeline capabilities
//compile ":sass-asset-pipeline:1.5.5"
//compile ":less-asset-pipeline:1.5.3"
//compile ":coffee-asset-pipeline:1.5.0"
//compile ":handlebars-asset-pipeline:1.3.0.1"
}
}
Change your dependencies block to set compile time dependency, and also remove unneeded groovy dependency:
dependencies {
test "org.grails:grails-datastore-test-support:1.0-grails-2.3"
compile 'org.apache.poi:poi:3.14'
compile 'org.apache.poi:poi-ooxml:3.14'
}
Grails already provides an appropriate version of Groovy, so you won't need to provide that. The POI dependencies will be needed for code compilation and so they should be compile time dependencies.
If that does not fix your problem it is at least possible that GGTS is not downloading dependencies correctly, but I doubt that will be the case.