Grails 4.0.0 - Erro de compilação: General error during semantic analysis: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.FileItemFactory
18/09/2019 07:44
0
Por favor, podem ajudar.
Ao executar
grails compile
recebo o seguinte erro: 07:24:07.354 [ERROR] [system.err]
General error during semantic analysis: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.FileItemFactory

Procurei em todo o meu código referências a esta classe (org.apache.commons.fileupload.FileItemFactory) e não encontrei.

application.yml:

grails:
profile: web
codegen:
defaultPackage: jobeasier4
gorm:
reactor:
# Whether to translate GORM events into Reactor events
# Disabled by default for performance reasons
events: false
info:
app:
name: '@info.app.name@'
version: '@info.app.version@'
grailsVersion: '@info.app.grailsVersion@'
spring:
jmx:
unique-names: true
main:
banner-mode: "off"
groovy:
template:
check-template-location: false
devtools:
restart:
additional-exclude:
- '*.gsp'
- '**/*.gsp'
- '*.gson'
- '**/*.gson'
- 'logback.groovy'
- '*.properties'
management:
endpoints:
enabled-by-default: false

---
grails:
mime:
disable:
accept:
header:
userAgents:
- Gecko
- WebKit
- Presto
- Trident
types:
all: '*/*'
atom: application/atom+xml
css: text/css
csv: text/csv
form: application/x-www-form-urlencoded
html:
- text/html
- application/xhtml+xml
js: text/javascript
json:
- application/json
- text/json
multipartForm: multipart/form-data
pdf: application/pdf
rss: application/rss+xml
text: text/plain
hal:
- application/hal+json
- application/hal+xml
xml:
- text/xml
- application/xml
urlmapping:
cache:
maxsize: 1000
controllers:
defaultScope: singleton
converters:
encoding: UTF-8
views:
default:
codec: html
gsp:
encoding: UTF-8
htmlcodec: xml
codecs:
expression: html
scriptlet: html
taglib: none
staticparts: none
management:
endpoints:
jmx:
unique-names: true

---
hibernate:
cache:
queries: false
use_second_level_cache: false
use_query_cache: false
dataSource:
pooled: true
jmxExport: true
driverClassName: org.h2.Driver
username: sa
password: ''

environments:
development:
dataSource:
dbCreate: create-drop
url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
test:
dataSource:
dbCreate: update
url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
production:
dataSource:
dbCreate: none
url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
properties:
jmxEnabled: true
initialSize: 5
maxActive: 50
minIdle: 5
maxIdle: 25
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: ConnectionState
defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED


gradle.properties

grailsVersion=4.0.0
gorm.version=7.0.2.RELEASE



build.gradle

buildscript {
repositories {
mavenLocal()
mavenCentral()
maven { url "https://repo.grails.org/grails/core" }
}

dependencies {
classpath "org.grails:grails-gradle-plugin:$grailsVersion"
classpath "org.grails.plugins:hibernate5:7.0.0"
classpath "gradle.plugin.com.github.erdi.webdriver-binaries:webdriver-binaries-gradle-plugin:2.0"
classpath "com.bertramlabs.plugins:asset-pipeline-gradle:3.0.10"

// TomCat
ext['tomcat.version'] = '9.0.0.M4'

}

dependencies {
classpath 'org.grails.plugins:quartz:2.0.13' // Needed to compile *Job classes
}


}

version "0.1"
group "jobeasier4"

apply plugin:"eclipse"
apply plugin:"idea"
apply plugin:"war"
apply plugin:"org.grails.grails-web"
apply plugin:"com.github.erdi.webdriver-binaries"
apply plugin:"org.grails.grails-gsp"
apply plugin:"com.bertramlabs.asset-pipeline"



repositories {
maven { url "https://repo.grails.org/grails/core" }
}

configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}

dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.grails:grails-core"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-web-boot"
compile "org.grails:grails-logging"
compile "org.grails:grails-plugin-rest"
compile "org.grails:grails-plugin-databinding"
compile "org.grails:grails-plugin-i18n"
compile "org.grails:grails-plugin-services"
compile "org.grails:grails-plugin-url-mappings"
compile "org.grails:grails-plugin-interceptors"
compile "org.grails.plugins:cache"
compile "org.grails.plugins:async"
compile "org.grails.plugins:scaffolding"
compile "org.grails.plugins:events"
compile "org.grails.plugins:hibernate5"
compile "org.hibernate:hibernate-core:5.4.0.Final"
compile "org.grails.plugins:gsp"
compileOnly "io.micronaut:micronaut-inject-groovy"
console "org.grails:grails-console"
profile "org.grails.profiles:web"
runtime "org.glassfish.web:el-impl:2.1.2-b03"
runtime "com.h2database:h2"
runtime "org.apache.tomcat:tomcat-jdbc"
runtime "javax.xml.bind:jaxb-api:2.3.0"
runtime "com.bertramlabs.plugins:asset-pipeline-grails:3.0.10"
testCompile "org.grails:grails-gorm-testing-support"
testCompile "org.mockito:mockito-core"
testCompile "org.grails:grails-web-testing-support"
testCompile "org.grails.plugins:geb"
testCompile "org.seleniumhq.selenium:selenium-remote-driver:3.14.0"
testCompile "org.seleniumhq.selenium:selenium-api:3.14.0"
testCompile "org.seleniumhq.selenium:selenium-support:3.14.0"
testRuntime "org.seleniumhq.selenium:selenium-chrome-driver:3.14.0"
testRuntime "org.seleniumhq.selenium:selenium-firefox-driver:3.14.0"

// Plugins específicos do JobEasier
compile 'joda-time:joda-time:2.10.3'
compile 'org.joda:joda-money:0.10.0'

compile 'org.jadira.usertype:usertype.core:7.0.0.CR1'

compile 'org.apache.shiro:shiro-web:1.4.1'
compile 'org.apache.shiro:shiro-core:1.4.1'

// Activiti

compile group: 'org.activiti', name: 'activiti-engine', version: '7.1.0.M3.1'
compile 'org.activiti:activiti-spring:7.1.0.M3.1'
compile 'org.activiti:activiti-bpmn-model:7.1.0.M3.1'
compile group: 'org.activiti.api', name: 'activiti-api-task-model', version: '7.1.0.M3.1'
compile group: 'org.activiti.core.common', name: 'activiti-spring-identity', version: '7.1.0.M3.1'
compile group: 'org.activiti', name: 'activiti-form-engine', version: '6.0.0'




// Quartz
compile group: 'org.quartz-scheduler', name: 'quartz', version: '2.3.0'


}


bootRun {
jvmArgs(
'-Dspring.output.ansi.enabled=always',
'-noverify',
'-XX:TieredStopAtLevel=1',
'-Xmx1024m')
sourceResources sourceSets.main
String springProfilesActive = 'spring.profiles.active'
systemProperty springProfilesActive, System.getProperty(springProfilesActive)
}

webdriverBinaries {
chromedriver '2.45.0'
geckodriver '0.24.0'
}

tasks.withType(Test) {
systemProperty "geb.env", System.getProperty('geb.env')
systemProperty "geb.build.reportsDir", reporting.file("geb/integrationTest")
systemProperty "webdriver.chrome.driver", System.getProperty('webdriver.chrome.driver')
systemProperty "webdriver.gecko.driver", System.getProperty('webdriver.gecko.driver')
}


assets {
minifyJs = true
minifyCss = true
}
Tags: Grails,4.0.0,NoClassDefFoundError,org.apache.commons.fileupload.FileItemFactory


1
Opa Pedro,

isto com certeza é uma dependência indireta de algum plugin. No Grails 4 eles passaram a usar o Micronaut como base para as requisições, então pode ser que as antigas dependências para lidar com upload de arquivos (esta classe é disto aí) estejam com problema.

Uma solução seria incluir a dependência no seu arquivo Gradle. A questão é: qual versão desta biblioteca usar: minha sugestão é criar um projeto com a versão anterior do Grails que estava usando e ver qual a versão estava sendo adotada. E na sequência, incluir a dependência no seu projeto. Encontrei a última versão neste link: https://search.maven.org/artifact/commons-fileupload/commons-fileupload/1.4/jar

PS: estou migrando o Grails Brasil e o Spring Brasil para o Grails 4, mas mais como um exercício. Não recomendo de forma alguma o uso destes releases ".0" em produção, especialmente este: é garantia de dor de cabeça por que ainda surgirão muitos bugs a serem resolvidos.


0
Olá Kiko.
Vou verificar estas questões de dependência e partir para a missão.
Eu tenho uma versão 2.5.6 rodando ok. Mas confesso que não estas questões de parametrização não são meu forte. 
Como a aplicação não está em produção, acho que posso me aventurar pela versão 4.0.0.
--- Se fosse possível, gostaria de um olhar seu sobre este projeto. Pode ser? Meu skype é pedrogentil2554
18/09/2019 13:35


0
 Não me aventuraria com o Grails 4.0.0 ainda: os resultados que estou tendo neste momento são bastante decepcionantes (realmente decepcionantes):

* Não tem o grande ganho de inicialização que prometeram.
* E nem de memória
* Na realidade, não estou conseguindo ver ganho algum.

Muito mais jogo você ir para o Grails 3.3.9, até por que sequer o recarregamento dinâmico de classes está 100% como você pode ver aqui: https://dev.to/erichelgeson/grails-4-upgrade-notes-3cja

(e este carregamento dinâmico é uma das principais razões pelas quais Grails nos trás grandes ganhos)


0
Caramba... É bem desencorajadora esta perspectiva. Mas o Grails terá que sair desta.
A jornada que tive para fazer a migração para a versão 4 foi uma dor-de-cabeça enorme - e veja: ainda nem consegui encerrar a tarefa. 
De quelquer forma vou seguir seu conselho, afinal você é o maior guru no assunto do Hemisfério Sul!
Obrigado meu amigo!
19/09/2019 09:12



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto