Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IntelliJ IDEA building incomplete Grails war

I'm beginning grails development with IntelliJ but just cannot make and deploy a newly created grails app to a local or external Tomcat following the procedure described in this answer

The manager app in Tomcat shows that the application is up and running but I always get http 404 when opening the index page. I noticed that it's possible to download the index.gsp file - it just seems that grails isn't initialized correctly:

enter image description here

These are the versions I tried:

  • IntelliJ IDEA 12.1.6 Ultimate
  • Grails 2.1.1, 2.2.4 and 2.3.2
  • Tomcat 7.0.47 and 6.

These are the detailed steps I took several times, even on different computers, always with same result:

  • create a new grails app in IntelliJ and launch default run configuration (grails) - so far that's working fine.

  • set up deployment to a local Tomcat server. I've configured the application server in IntelliJ, creating an artifact (Web Application: Archive or Web Application: Exploded) using the GrailsWeb facet and assigned it to be deployed.

  • start the local application server and IntelliJ would report that the artifact is deployed successfully

  • opening the browser will give 404

WHY? What am I doing wrong?

It must be something about the grails plugin in IntelliJ, because I was able to pull an example Java application (spring-petclinic) from github and simply run it in Tomcat without trouble...

Update:

I've noticed that I can manually deploy the war which is generated under target using "Make Grails Web archive". But when I do the same with the war of the artifact under out/... it won't work.

Obviously the latter one wasn't generated correctly: its missing MANIFEST.MF under META-INF and there's also no grails.xml and grails-app under WEB-INF!

directory comparison

Could you please have a look at the facets: Is there something wrong?

IntelliJ project structure

I tried many artifact configurations, e.g. this one:

Artifact configuration

Directory structure generated using the settings above:

Comparing this to the war file generated by grails shows many differences, e.g. the index.gsp is located in the root, not under WEB-INF/grails-app. And there's also no grails.xml under WEB-INF

C:\prj\gtest5\out\artifacts\gtest5_war_exploded>tree /f
Auflistung der Ordnerpfade
Volumeseriennummer : 2842-D2F0
C:.
   error.gsp
   index.gsp

├───css
       errors.css
       main.css
       mobile.css

├───dbdoc
       _globalnav.gsp
       _index.gsp
       _overview-summary.gsp
       _stylesheet.gsp

├───images
      apple-touch-icon-retina.png
      apple-touch-icon.png
      favicon.ico
      grails_logo.jpg
      grails_logo.png
      leftnav_btm.png
      leftnav_midstretch.png
      leftnav_top.png
      spinner.gif
      springsource.png
   
   └───skin
           database_add.png
           database_delete.png
           database_edit.png
           database_save.png
           database_table.png
           exclamation.png
           house.png
           information.png
           shadow.jpg
           sorted_asc.gif
           sorted_desc.gif

├───js
      application.js
   
   └───jquery
           jquery-1.8.0.js
           jquery-1.8.0.min.js

├───layouts
       main.gsp

└───WEB-INF
       applicationContext.xml
       sitemesh.xml
    
    ├───classes
          JQueryResourceTagLib$_closure1.class
          JQueryResourceTagLib$_closure2.class
          JQueryResourceTagLib$_closure2_closure4.class
          JQueryResourceTagLib$_closure2_closure5.class
          JQueryResourceTagLib$_closure2_closure6.class
          JQueryResourceTagLib$_closure2_closure7.class
          JQueryResourceTagLib$_closure3.class
          JQueryResourceTagLib.class
          JQueryService$_closure1.class
          JQueryService$_closure2.class
          JQueryService$_closure3.class
          JQueryService$_closure4.class
          JQueryService.class
          JQueryTagLib$_closure1.class
          JQueryTagLib$_closure1_closure6.class
          JQueryTagLib$_closure2.class
          JQueryTagLib$_closure3.class
          JQueryTagLib$_closure4.class
          JQueryTagLib$_closure5.class
          JQueryTagLib.class
          messages.properties
          messages_cs_CZ.properties
          messages_da.properties
          messages_de.properties
          messages_es.properties
          messages_fr.properties
          messages_it.properties
          messages_ja.properties
          messages_nl.properties
          messages_pl.properties
          messages_pt_BR.properties
          messages_pt_PT.properties
          messages_ru.properties
          messages_sv.properties
          messages_th.properties
          messages_zh_CN.properties
       
       ├───grails
          └───plugin
              ├───cache
                    BlockingCache.class
                    Cacheable.class
                    CacheBeanPostProcessor.class
                    CacheConfigArtefactHandler$CacheConfigGrailsClass.class
                    CacheConfigArtefactHandler$DefaultCacheConfigGrailsClass.class
                    CacheConfigArtefactHandler.class
                    CacheConfiguration.class
                    CacheEvict.class
                    CachePut.class
                    CacheTagLib$_closure1.class
                    CacheTagLib$_closure2.class
                    CacheTagLib.class
                    ConfigBuilder.class
                    ConfigLoader$_sortConfigs_closure1.class
                    ConfigLoader.class
                    GrailsAnnotationCacheOperationSource$DefaultCacheKey.class
                    GrailsAnnotationCacheOperationSource.class
                    GrailsCache.class
                    GrailsCacheAdminService.class
                    GrailsCacheManager.class
                    GrailsConcurrentMapCache.class
                    GrailsConcurrentMapCacheManager.class
                    GrailsValueWrapper.class
                    SerializableByteArrayOutputStream.class
                    SerializableOutputStream.class
                    Timer.class
                 
                 ├───compiler
                        CacheTransformation.class
                 
                 ├───util
                        ClassUtils.class
                 
                 └───web
                        AlreadyGzippedException.class
                        ContentCacheParameters.class
                        GenericResponseWrapper$1.class
                        GenericResponseWrapper.class
                        Header$Type.class
                        Header.class
                        HttpDateFormatter.class
                        PageInfo.class
                        ProxyAwareMixedGrailsControllerHelper.class
                        SerializableCookie.class
                     
                     └───filter
                            AbstractFilter.class
                            CacheExpressionRootObject.class
                            CacheOperationContext.class
                            DefaultWebKeyGenerator.class
                            ExpressionEvaluator.class
                            FilterServletOutputStream.class
                            LazyParamAwareEvaluationContext.class
                            NoOpFilter.class
                            PageFragmentCachingFilter$1.class
                            PageFragmentCachingFilter$2.class
                            PageFragmentCachingFilter$CacheStatus.class
                            PageFragmentCachingFilter.class
                            WebKeyGenerator.class
                         
                         └───simple
                                 MemoryBlockingCache.class
                                 MemoryCacheConfiguration.class
                                 MemoryPageFragmentCachingFilter.class
              
              ├───databasemigration
                    ChangelogXml2Groovy$_appendAttrs_closure1.class
                    ChangelogXml2Groovy$_appendWithIndent_closure2.class
                    ChangelogXml2Groovy.class
                    DbdocController$_closure1.class
                    DbdocController.class
                    DslBuilder$1.class
                    DslBuilder$_expandExpressions_closure1.class
                    DslBuilder$_extractZipFile_closure3.class
                    DslBuilder$_handleIncludedChangeLog_closure7.class
                    DslBuilder$_processIncludeAll_closure2.class
                    DslBuilder$_processProperty_closure5.class
                    DslBuilder$_processRollback_closure4.class
                    DslBuilder$_setPropertiesFromAttributes_closure6.class
                    DslBuilder.class
                    GormDatabase.class
                    GormDatabaseSnapshotGenerator$_createIdentifierGenerator_closure4.class
                    GormDatabaseSnapshotGenerator$_createSnapshot_closure1.class
                    GormDatabaseSnapshotGenerator$_createSnapshot_closure2.class
                    GormDatabaseSnapshotGenerator$_isIdentityColumn_closure3.class
                    GormDatabaseSnapshotGenerator.class
                    GormDatabaseTypeConverter.class
                    GrailsChange$1.class
                    GrailsChange.class
                    GrailsChangeLogParser$_setChangelogProperties_closure1.class
                    GrailsChangeLogParser.class
                    GrailsClassLoaderResourceAccessor.class
                    GrailsDiffStatusListener.class
                    GrailsPrecondition$1.class
                    GrailsPrecondition.class
                    GroovyAwareStringChangeLogSerializer.class
                    Log4jLogger.class
                    MigrationRunner$_autoRun_closure1.class
                    MigrationRunner.class
                    MigrationUtils$_getDatabase_closure1.class
                    MigrationUtils.class
                    MysqlAwareCreateTableGenerator.class
                    ScriptUtils$_appendToChangelog_closure2.class
                    ScriptUtils$_appendToChangelog_closure2_closure3.class
                    ScriptUtils$_appendToChangelog_closure2_closure4.class
                    ScriptUtils$_executeAndWrite_closure1.class
                    ScriptUtils.class
                 
                 └───dbdoc
                         AuthorListWriter.class
                         AuthorWriter.class
                         ChangeLogListWriter.class
                         ChangeLogWriter.class
                         ColumnWriter.class
                         HTMLListWriter.class
                         HTMLWriter.class
                         MemoryDocVisitor.class
                         PendingChangesWriter.class
                         PendingSQLWriter.class
                         RecentChangesWriter.class
                         TableListWriter.class
                         TableWriter$_writeCustomHTML_closure1.class
                         TableWriter.class
              
              └───webxml
                      FilterManager.class
       
       └───org
           ├───codehaus
              └───groovy
                  └───grails
                      └───plugins
                          └───jquery
                                  JQueryConfig$_init_closure1.class
                                  JQueryConfig$_init_closure2.class
                                  JQueryConfig.class
                                  JQueryProvider$_doRemoteFunction_closure1.class
                                  JQueryProvider$_doRemoteFunction_closure2.class
                                  JQueryProvider$_doRemoteFunction_closure3.class
                                  JQueryProvider$_doRemoteFunction_closure4.class
                                  JQueryProvider.class
           
           └───grails
               └───plugin
                   ├───resource
                         AggregatedResourceMeta$_buildAggregateResource_closure3.class
                         AggregatedResourceMeta$_buildAggregateResource_closure3_closure4.class
                         AggregatedResourceMeta$_containsResource_closure1.class
                         AggregatedResourceMeta$_isDirty_closure2.class
                         AggregatedResourceMeta.class
                         CSSBundleResourceMeta.class
                         CSSLinkProcessor$_process_closure1.class
                         CSSLinkProcessor.class
                         DevModeSanityFilter.class
                         JavaScriptBundleResourceMeta.class
                         ProcessingFilter.class
                         ResourceMeta$_reset_closure1.class
                         ResourceMeta.class
                         ResourceModule$_closure1.class
                         ResourceModule$_getRequiredDispositions_closure3.class
                         ResourceModule$_newResourceFromArgs_closure2.class
                         ResourceModule.class
                         ResourceProcessor$_afterPropertiesSet_closure5.class
                         ResourceProcessor$_afterPropertiesSet_closure6.class
                         ResourceProcessor$_canProcessLegacyResource_closure7.class
                         ResourceProcessor$_canProcessLegacyResource_closure8.class
                         ResourceProcessor$_defineModuleFromBuilder_closure16.class
                         ResourceProcessor$_dumpResources_closure21.class
                         ResourceProcessor$_dumpResources_closure21_closure35.class
                         ResourceProcessor$_dumpResources_closure21_closure36.class
                         ResourceProcessor$_dumpResources_closure22.class
                         ResourceProcessor$_dumpStats_closure20.class
                         ResourceProcessor$_dumpStats_closure20_closure34.class
                         ResourceProcessor$_findSyntheticResourceById_closure9.class
                         ResourceProcessor$_getConfigParamOrDefault_closure23.class
                         ResourceProcessor$_getResourceMetaForURI_closure10.class
                         ResourceProcessor$_getResourceMetaForURI_closure10_closure27.class
                         ResourceProcessor$_getServletContext_closure24.class
                         ResourceProcessor$_loadModules_closure17.class
                         ResourceProcessor$_loadModules_closure18.class
                         ResourceProcessor$_loadModules_closure18_closure30.class
                         ResourceProcessor$_loadModules_closure18_closure31.class
                         ResourceProcessor$_loadModules_closure18_closure31_closure32.class
                         ResourceProcessor$_loadModules_closure18_closure31_closure33.class
                         ResourceProcessor$_loadModules_closure19.class
                         ResourceProcessor$_makeFileSystemPathFromURI_closure11.class
                         ResourceProcessor$_prepareResourceBatch_closure13.class
                         ResourceProcessor$_prepareResourceBatch_closure14.class
                         ResourceProcessor$_prepareResourceBatch_closure14_closure28.class
                         ResourceProcessor$_prepareResourceBatch_closure14_closure29.class
                         ResourceProcessor$_prepareResourceBatch_closure15.class
                         ResourceProcessor$_prepareSingleDeclaredResource_closure12.class
                         ResourceProcessor$_updateDependencyOrder_closure1.class
                         ResourceProcessor$_updateDependencyOrder_closure2.class
                         ResourceProcessor$_updateDependencyOrder_closure3.class
                         ResourceProcessor$_updateDependencyOrder_closure3_closure25.class
                         ResourceProcessor$_updateDependencyOrder_closure4.class
                         ResourceProcessor$_updateDependencyOrder_closure4_closure26.class
                         ResourceProcessor.class
                         ResourceProcessorBatch.class
                         ResourceTagLib$_closure1.class
                         ResourceTagLib$_closure10.class
                         ResourceTagLib$_closure10_closure17.class
                         ResourceTagLib$_closure1_closure15.class
                         ResourceTagLib$_closure2.class
                         ResourceTagLib$_closure3.class
                         ResourceTagLib$_closure4.class
                         ResourceTagLib$_closure5.class
                         ResourceTagLib$_closure5_closure16.class
                         ResourceTagLib$_closure6.class
                         ResourceTagLib$_closure7.class
                         ResourceTagLib$_closure8.class
                         ResourceTagLib$_closure9.class
                         ResourceTagLib$_resolveResourceAndURI_closure12.class
                         ResourceTagLib$_writeAttrs_closure11.class
                         ResourceTagLib$__clinit__closure13.class
                         ResourceTagLib$__clinit__closure14.class
                         ResourceTagLib.class
                         URLUtils.class
                      
                      ├───mapper
                             MapperPhase.class
                             ResourceMapper$_closure1.class
                             ResourceMapper$_getDefaultExcludes_closure8.class
                             ResourceMapper$_getDefaultIncludes_closure9.class
                             ResourceMapper$_getExcludes_closure10.class
                             ResourceMapper$_getExcludingPattern_closure2.class
                             ResourceMapper$_getIncludes_closure11.class
                             ResourceMapper$_getIncludingPattern_closure3.class
                             ResourceMapper$_getName_closure7.class
                             ResourceMapper$_getOperation_closure5.class
                             ResourceMapper$_getPhase_closure4.class
                             ResourceMapper$_getPriority_closure6.class
                             ResourceMapper.class
                             ResourceMappersFactory$_createResourceMappers_closure1.class
                             ResourceMappersFactory$_createResourceMappers_closure2.class
                             ResourceMappersFactory$_createResourceMappers_closure2_closure7.class
                             ResourceMappersFactory$_createResourceMappers_closure3.class
                             ResourceMappersFactory$_createResourceMappers_closure4.class
                             ResourceMappersFactory$_createResourceMappers_closure5.class
                             ResourceMappersFactory$_createResourceMappers_closure6.class
                             ResourceMappersFactory.class
                      
                      ├───module
                             ModuleBuilder.class
                             ModuleDeclarationsFactory$_getModuleDeclarations_closure1.class
                             ModuleDeclarationsFactory$_getModuleDeclarations_closure2.class
                             ModuleDeclarationsFactory$_getModuleDeclarations_closure3.class
                             ModuleDeclarationsFactory.class
                             ModulesBuilder$_invokeMethod_closure1.class
                             ModulesBuilder.class
                      
                      └───util
                              HalfBakedLegacyLinkGenerator.class
                              ResourceMetaStore$_addResource_closure1.class
                              ResourceMetaStore.class
                   
                   └───resources
                       └───artefacts
                               AbstractResourcesArtefactHandler.class
                               DefaultResourceMapperClass.class
                               DefaultResourcesClass.class
                               ResourceMapperArtefactHandler.class
                               ResourceMapperClass.class
                               ResourcesArtefactHandler.class
                               ResourcesClass.class
    
    ├───lib
           ant-1.8.2.jar
           ant-junit-1.8.2.jar
           ant-launcher-1.8.2.jar
           ant-trax-1.7.1.jar
           antlr-2.7.7.jar
           aopalliance-1.0.jar
           asm-3.1.jar
           aspectjrt-1.6.10.jar
           aspectjweaver-1.6.10.jar
           bcmail-jdk14-138.jar
           bcpg-jdk15-1.45.jar
           bcprov-jdk15-1.45.jar
           cglib-2.2.jar
           commons-beanutils-1.8.3.jar
           commons-cli-1.2.jar
           commons-codec-1.5.jar
           commons-collections-3.2.1.jar
           commons-dbcp-1.4.jar
           commons-el-1.0.jar
           commons-fileupload-1.2.2.jar
           commons-io-2.1.jar
           commons-lang-2.6.jar
           commons-pool-1.5.6.jar
           commons-validator-1.3.1.jar
           concurrentlinkedhashmap-lru-1.2_jdk5.jar
           core-renderer-R8.jar
           dom4j-1.6.1.jar
           ecj-3.7.2.jar
           ehcache-core-2.4.6.jar
           gant_groovy1.8-1.9.6.jar
           grails-2.1.1.jar
           grails-bootstrap-2.1.1.jar
           grails-core-2.1.1.jar
           grails-crud-2.1.1.jar
           grails-datastore-core-1.1.0.RELEASE.jar
           grails-datastore-gorm-1.1.0.RELEASE.jar
           grails-datastore-simple-1.1.0.RELEASE.jar
           grails-docs-2.1.1.jar
           grails-gdoc-engine-1.0.1.jar
           grails-hibernate-2.1.1.jar
           grails-logging-2.1.1.jar
           grails-plugin-async-2.1.1.jar
           grails-plugin-codecs-2.1.1.jar
           grails-plugin-controllers-2.1.1.jar
           grails-plugin-converters-2.1.1.jar
           grails-plugin-datasource-2.1.1.jar
           grails-plugin-domain-class-2.1.1.jar
           grails-plugin-filters-2.1.1.jar
           grails-plugin-gsp-2.1.1.jar
           grails-plugin-i18n-2.1.1.jar
           grails-plugin-log4j-2.1.1.jar
           grails-plugin-mimetypes-2.1.1.jar
           grails-plugin-scaffolding-2.1.1.jar
           grails-plugin-services-2.1.1.jar
           grails-plugin-servlets-2.1.1.jar
           grails-plugin-testing-2.1.1.jar
           grails-plugin-tomcat-2.1.1.jar
           grails-plugin-url-mappings-2.1.1.jar
           grails-plugin-validation-2.1.1.jar
           grails-resources-2.1.1.jar
           grails-scripts-2.1.1.jar
           grails-spring-2.1.1.jar
           grails-test-2.1.1.jar
           grails-test-suite-base-2.1.1.jar
           grails-web-2.1.1.jar
           grails-webflow-2.1.1.jar
           grails-wrapper-support-2.1.1.jar
           groovy-all-1.8.8.jar
           h2-1.3.164.jar
           hamcrest-core-1.1.jar
           hibernate-commons-annotations-3.2.0.Final.jar
           hibernate-core-3.6.10.Final.jar
           hibernate-ehcache-3.6.10.Final.jar
           hibernate-jpa-2.0-api-1.0.1.Final.jar
           hibernate-validator-4.1.0.Final.jar
           hsqldb-1.8.0.10.jar
           itext-2.0.8.jar
           ivy-2.2.0.jar
           jansi-1.2.1.jar
           javassist-3.16.1-GA.jar
           javax.servlet-api-3.0.1.jar
           jcl-over-slf4j-1.6.2.jar
           jline-1.0.jar
           jna-3.2.3.jar
           json-simple-1.1.jar
           jsp-api-2.0.jar
           jsp-api-2.1.jar
           jstl-1.1.2.jar
           jta-1.1.jar
           jul-to-slf4j-1.6.2.jar
           junit-4.10.jar
           liquibase-core-2.0.5.jar
           log4j-1.2.16.jar
           ognl-2.7.3.jar
           org.springframework.uaa.client-1.0.1.RELEASE.jar
           oro-2.0.8.jar
           persistence-api-1.0.jar
           protobuf-java-2.4.1.jar
           serializer-2.7.1.jar
           servlet-api-2.4.jar
           sitemesh-2.4.jar
           slf4j-api-1.6.2.jar
           snakeyaml-1.8.jar
           spring-aop-3.1.2.RELEASE.jar
           spring-asm-3.1.2.RELEASE.jar
           spring-aspects-3.1.2.RELEASE.jar
           spring-beans-3.1.2.RELEASE.jar
           spring-binding-2.0.8.RELEASE.jar
           spring-context-3.1.2.RELEASE.jar
           spring-context-support-3.1.2.RELEASE.jar
           spring-core-3.1.2.RELEASE.jar
           spring-expression-3.1.2.RELEASE.jar
           spring-jdbc-3.1.2.RELEASE.jar
           spring-jms-3.1.2.RELEASE.jar
           spring-js-2.0.8.RELEASE.jar
           spring-orm-3.1.2.RELEASE.jar
           spring-test-3.1.2.RELEASE.jar
           spring-tx-3.1.2.RELEASE.jar
           spring-web-3.1.2.RELEASE.jar
           spring-webflow-2.0.8.RELEASE.jar
           spring-webmvc-3.1.2.RELEASE.jar
           springloaded-core-1.0.6.jar
           standard-1.1.2.jar
           tomcat-annotations-api-7.0.30.jar
           tomcat-api-7.0.30.jar
           tomcat-catalina-7.0.30.jar
           tomcat-catalina-ant-7.0.30.jar
           tomcat-coyote-7.0.30.jar
           tomcat-embed-core-7.0.30.jar
           tomcat-embed-jasper-7.0.30.jar
           tomcat-embed-logging-juli-7.0.30.jar
           tomcat-embed-logging-log4j-7.0.30.jar
           tomcat-juli-7.0.30.jar
           tomcat-servlet-api-7.0.30.jar
           tomcat-util-7.0.30.jar
           validation-api-1.0.0.GA.jar
           xpp3_min-1.1.4c.jar
    
    └───tld
            c.tld
            fmt.tld
            grails.tld
            spring.tld
like image 604
HAL 9000 Avatar asked Nov 18 '13 16:11

HAL 9000


1 Answers

It's actually a known issue:

  • IDEA-72093 Allow to deploy in run configuration war created by "grails war"

You should use workaround from the first comment:

When you run server, you need to do two things: run Build | Make Grails Web Archive, and then run server's run configuration with created war added as external source.

In case you are not aware of the external source option, check this screenshot.

like image 66
CrazyCoder Avatar answered Oct 01 '22 04:10

CrazyCoder