Using grails-mail-plugin outside Grails app - grails

Is it possible to use a grails plugin outside a grails application?
I would like to use the functionality of grails-mail-plugin in a simple groovy/gradle app.
I found some information about binary plugins but I'm not sure how to define the dependency to an official grails plugin.
Thanks!

I don't think you could use any Grails plugin itself outside the Grails environment, usually there is a ton of Grails-specific assumptions built into the plugins' code.
If your Groovy application uses Spring, you could migrate the most important functionality out of it.
For this, you will have to get into the innards of the source code of the plugin (e.g. how it uses the Spring Mail package for example) which not may be very quick or easy work.
If your requirements are simple, you may be better of with building a standalone solution, possibly, directly on top of JavaMail.
If you already have a heterogeneous architecture, you may build a separate Grails application/module which only does mailing functionality (possibly through the Async Mail plugins database tables) in integration with the module you build in pure Groovy.

Related

Can i upgrade directly from Grails 2.x to Grails 4.x bypassing all median levels

I am having an application build on grails 2.2.4. I need to update it to grails 4.0.8 Can i upgrade directly. As i checked from various sources, i need to jump first from 2.2.4 to 3.x then thereafter 3.x to 4.x. Please suggest me optimum way to do this upgrade.
Similar to other question about Grails upgrades
Major version upgrades in Grails are rarely trivial. I'd suggest starting a new app in the target version, and migrating classes/functionalities.
In Grails framework, the effort required to update your application depends on multiple factors, such as:
The standard practices. For instance, the persistence stuff in the Grails services instead of controller or domains itself.
The underline plugins your application depends on. You would need to update to the latest version of the plugin, or in some case find an alternative approaches as the plugin may longer be maintained, or there maybe better ways of doing it. For instance, we had some custom plugin for multi-tenancy back when I started with Grails, But now, GORM has great support for multi-tenancy.
I personally think you should directly jump from Grails 2 to Grails 4 by creating a new application, and then move your source code. But, first you need to identify all the variables such as plugins or libraries.

Grails UI plugins

I'm doing web project using Java EE framework.
I want to use Grails UiPerformance plugin in my project.
Can I use that plugin for user interface design?
I would like to know what is the purpose of this plugin?
There are a few reasons why this is not the plugin you want. The purpose of the plugin is described here - it's to improve page loading performance and deals with gzipping, minification, bundling, etc.
The primary reason is that it has nothing to do with interface design. And if you do want a plugin for static resource handling, the asset-pipeline plugin is the current best option.

Creating Grails shared libraries

I'm working on a multi-module project right now, where most of the modules are designed to have their own Web interface (REST API, Web pages, etc.) done using Grails. There are a few classes that I want to be utilized by different (all) modules. If this were a straightforward Java project, I would just create a new Maven project (using archetype:generate), deploy/install, and just import it on the modules accordingly. How do I do this with Grails? Is this one of the things Grails plugins are meant to address?
Since you are talking about a jar/lib artifact it would be best to use a local Maven repository where you build your maven project to then resolve it as a dependency for your modules within your BuildConfig.groovy.
Nothing is stopping you from using a Grails plugin to provide this resource, but that seems a bit overkill since Grails plugins are intended to do so much more.
It looks to me that you want to have a multi-project build or a Mavenized Grails project or separate plugins.
Use a Grails multi-project-build
Guide: http://grails.org/doc/2.1.0/ref/Command%20Line/create-multi-project-build.html
Straight Maven integration
Guide : http://grails.org/doc/latest/guide/commandLine.html#antAndMaven
I have a basic introduction video here: https://www.youtube.com/watch?v=tqGN61hiciE
Separate Grails plugins
You could still use separate Grails plugins and reference them in your main application.

Groovy + OSGi or Grails?

I have been learning OSGi and also a little about Groovy recently but am very new to both. I know Groovy is part of the Grails framework and that Grails is good for rapid development. One of the most desirable features in OSGi is class loader management and I believe this is probably still an issue with Grails (correct me if wrong). So, I'm curious is it possible, or even desirable to run Groovy and/or Grails in an OSGI environment?
There's a Grails plugin available, that turns a Grails application into an OSGi bundle that can be deployed on SpringSource's dm server. The plugin author has also posted some blog posts about the integration of Grails with OSGi. However, as far as I understand, the OSGi support of the Grails framework is still rather limited and will be "natively" supported with Grails 2.0.
In my opinion, there is no real benefit in packaging your entire application as an OSGi bundle, except that you can run it in a OSGi container. It will not make your application more modular, because it is still one big bundle. Note that using OSGi will not simplify anything with regard to class loading. It can introduce problems when you are using libraries which have not been designed to run in an OSGi environment. Don't use it unless you have a good reason to do so. It is a great technology, but it will not make anything simpler or better by just dropping it in.
I tend to think, that the other way around is more preferable: let Grails modules, like GORM or GSP run in an OSGi container.
All Groovy or Grails jars (which are modules rather than plugins now) are already OSGi-compatible, so it shouldn't be a problem to install them into a running container. Thus you can combine the advantages of both ecosystems.
On the other hand, deploying an app packaged as a huge monolithic bundle into a OSGi container doesn't make much difference compared to tomcat.

Compiled and signed grails plug-in

Is it possible to compile and sign grails plug-in? I am thinking about distributing my application logic using grails plug-in architecture and I do not want my client to be able to read that easily .groovy or to modify it. Is it possible to package it somehow or at least distribute only compiled .class?
Yes. you need to think more traditional Java.
Create a JAR with your logic in it and sign the jar. Put the minimum Groovy code in the plugin. You have not stated where the logic is if it's a controller or GORM object so I am not sure what you looking for 100%.
Hope this helps.
It is possible to compile and package groovy/java code into a jar and then use it in a grails app. (as Scott suggests) but these classes can not directly benefit from grails ie. no way to declare grails service, domain class or controller in a separate jar.
There is an issue in grails jira describing the same problem:
http://jira.codehaus.org/browse/GRAILS-4956
Since Grails 1.4 M1 there are binary plugins, I assume this is exactly what you need. I'm not sure if signing is supported in any way, but it's at least possible to distribute the plugin without its sources.

Resources