Giter Site home page Giter Site logo

sysgears / grain Goto Github PK

View Code? Open in Web Editor NEW
158.0 158.0 30.0 6.27 MB

Grain is a lightweight and powerful static website generator with custom themes to help create static, SEO-friendly websites or a blog in no time.

Home Page: https://sysgears.com/grain

License: Other

Groovy 88.13% Java 2.45% HTML 5.51% Ruby 1.24% Python 2.67%
grain-framework groovy static-site-generator

grain's People

Contributors

23shortstop avatar ajhepple avatar alexeysirenko avatar andsviat avatar anton-iarchuk-sysgears avatar dmitriypdv avatar double16 avatar emmanuelrosa avatar evgenijolshanskij avatar larixer avatar marshallpierce avatar mikaelzulfigarov avatar oermolaev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grain's Issues

Java 9 compatibility

What are the plans for making Grain compatible with Java 9? If it's going to be left as a java-8-only tool, that's certainly one option, but I'd prefer to know now if that's the case.

As far as the actual technical problems go, at the very least SiteLauncher#run() and AppModule#provideGroovyScriptEngine() both (try to) manipulate the classloader reflectively to add more classpath entries.

For SiteLauncher at least, it's not clear to me why this classpath manipulation is necessary. What is the point of gendeps gradle task, grainw and SiteLauncher? If we just let gradle handle dependencies without the intervening layers, there would be no need for such classpath changes at runtime. In other words, why not just use gradle tasks like https://github.com/sysgears/grain-theme-octopress/blob/master/build.gradle#L93 for everything and get rid of SiteLauncher and grainw?

Unable to specify proxy for Downloading SetupTools

When attempting to run preview mode behind a proxy the environment variables used by Python/Groovy/Gradle are not read when download of Python SetupTools is attempted. This results in a failure and inability to preview templates attempting to use pygments.

Console output before launch fails.

[Actor Thread 8] INFO  c.s.g.rpc.python.SetupToolsInstaller - Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-19.2.tar.gz...

Would be helpful to include download failure notification.

Dependency problem

Hi,

I just tried Grain by following the "Getting Started", but when I run "gradlew", I get the following build failure:

D:\odelia\grain>gradlew
:compileJava UP-TO-DATE
:compileGroovy

FAILURE: Build failed with an exception.

  • What went wrong:
    Could not resolve all dependencies for configuration ':compile'.

    Unexpected state Evicted for parent node for dependency from com.sysgears.grain:grain:0.4.2(compile) to org.codehaus.groovy:groovy:2.1.2(default).

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

I'm using JDK 7, and Windows 7.

Grain looks promising :-)

Bertrand.

Crash during preview

I've just got a crash during preview, which produces no error message. After gradle run with --stacktrace option, I've got the following:

D:\Work\MIPT\Projects\npm-site>gradle preview --stacktrace
:compileJava UP-TO-DATE                                                        
:compileGroovy UP-TO-DATE                                                        
:processResources UP-TO-DATE
:classes UP-TO-DATE
:preview                 
17:08:44.825 [main] INFO  c.sysgears.grain.init.ToolsExtractor - Grain version: 0.7.0-SNAPSHOT
17:08:44.828 [main] INFO  c.sysgears.grain.init.ToolsExtractor - Using tools home: C:\Users\darksnake\.grain\tools\bec29a30f3099697525295a1dfd17a85
17:08:45.887 [main] INFO  c.s.grain.config.ConfigUpdater - Rereading config D:\Work\MIPT\Projects\npm-site\SiteConfig.groovy
17:08:46.081 [main] INFO  c.s.grain.config.ConfigUpdater - Development environment is used
17:08:46.104 [main] INFO  c.sysgears.grain.config.ConfigBinder - Switching from com.sysgears.grain.rpc.python.AutoPython to com.sysgears.grain.rpc.python.Jython service for python.interpreter
17:08:46.269 [main] INFO  c.sysgears.grain.config.ConfigBinder - Switching from com.sysgears.grain.rpc.ruby.AutoRuby to com.sysgears.grain.rpc.ruby.JRuby service for ruby.interpreter
17:08:46.349 [Actor Thread 1] ERROR c.s.grain.preview.SitePreviewer - Port 4000 is not available, exitting...
17:08:46.354 [main] INFO  com.sysgears.grain.Application - Total time: 853
17:08:46.354 [main] INFO  com.sysgears.grain.Application - Press CTRL-C or 'q' and ENTER to Stop Grain
17:08:46.554 [Actor Thread 3] INFO  c.s.grain.css.compass.RubyCompass - Launching Ruby Compass process...
17:08:46.555 [Actor Thread 7] INFO  com.sysgears.grain.rpc.ruby.JRuby - Launching JRuby process...
17:08:46.630 [Actor Thread 7] INFO  com.sysgears.grain.rpc.ruby.JRuby - C:\Users\darksnake\.grain\tools\bec29a30f3099697525295a1dfd17a85\ruby-ipc\ipc.rb 65534
17:08:48.823 [Thread-13] INFO  c.s.grain.log.LoggingOutputStream - Starting Ruby IPC on port 65534
17:08:52.683 [Actor Thread 3] INFO  c.s.grain.css.compass.RubyCompass - Stopping Ruby Compass process...
17:08:52.689 [Actor Thread 3] INFO  c.s.grain.css.compass.RubyCompass - Ruby Compass process finished.
17:08:52.692 [Actor Thread 3] INFO  com.sysgears.grain.rpc.ruby.JRuby - Stopping JRuby process...
17:08:52.720 [Thread-13] INFO  com.sysgears.grain.rpc.ruby.JRuby - JRuby process finished...
:preview FAILED          

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':preview'.
> Process 'command 'C:\Program Files\Java\jdk\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':preview'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
        at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:212)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:205)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk\bin\java.exe'' finished with non-zero exit value 1
        at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:367)
        at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:31)
        at org.gradle.api.tasks.JavaExec.exec(JavaExec.java:74)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 57 more


BUILD FAILED

I just can't understand what went wrong. Generate task works fine.

Cache Busting

Hi!

I have one question, what's the best way to do cache busting with Grain? Is there a way you recommend?

I know that one part should be done at server level to add the proper headers in the response for cache, but what about add version to the JS/CSS/images URLS? Is that a thing we could do with Grain?

This is more to know if you could recommend / give and advice of how to handle that. I usually work with Grails and leverage that to asset-pipeline.

Thanks

Huge dependency download time and obsolete dependencies

Dependency download takes a lot of time due to very large number of compile dependencies. Probably, you should make additional dependency uber-jar or exclude some unnecessary dependencies. Also many dependecies are obsolete (for example, groovy 2.2.1).

NPE when invoking generate

With my current setup I get an NPE when I'm trying to generate html pages. grain doesn't tell me what's wrong about my configuration and/or urls.

./grainw generate
OpenJDK 64-Bit Server VM warning: ignoring option PermSize=32m; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
00:10:19.296 [main] INFO  c.sysgears.grain.init.ToolsExtractor - Grain version: 0.6.6
00:10:19.307 [main] INFO  c.sysgears.grain.init.ToolsExtractor - Using tools home: /home/chrisime/.grain/tools/d9cba5b8bf3d86c6deb58d28073d9fbc
00:10:22.764 [main] INFO  c.s.grain.config.ConfigUpdater - Rereading config /home/chrisime/Devel/business.backup/SiteConfig.groovy
00:10:24.170 [main] INFO  c.s.grain.config.ConfigUpdater - Production environment is used
00:10:24.249 [main] INFO  c.sysgears.grain.config.ConfigBinder - Switching from com.sysgears.grain.rpc.python.AutoPython to com.sysgears.grain.rpc.python.Jython service for python.interpreter
00:10:24.861 [main] INFO  c.sysgears.grain.config.ConfigBinder - Switching from com.sysgears.grain.rpc.ruby.AutoRuby to com.sysgears.grain.rpc.ruby.JRuby service for ruby.interpreter
00:10:24.910 [main] INFO  c.sysgears.grain.config.ConfigBinder - Switching from com.sysgears.grain.css.compass.RubyCompass to com.sysgears.grain.css.compass.FakeCompass service for features.compass
00:10:25.415 [main] INFO  c.s.grain.generate.SiteGenerator - Building resource registry...
00:10:25.453 [Actor Thread 1] INFO  com.sysgears.grain.registry.Registry - Starting resource scan
00:10:26.198 [Actor Thread 1] INFO  com.sysgears.grain.registry.Registry - Finished resource scan
00:10:26.218 [Actor Thread 1] INFO  com.sysgears.grain.registry.Registry - Starting filling up template cache
00:10:28.627 [Actor Thread 1] INFO  com.sysgears.grain.registry.Registry - Finished filling up template cache
00:10:28.633 [main] INFO  c.s.grain.registry.URLRegistry - Rebuilding url->resource map
00:10:28.796 [main] INFO  c.s.grain.generate.SiteGenerator - Generating resources... Time elapsed: 3399
java.lang.NullPointerException: Cannot invoke method endsWith() on null object
    at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at java_lang_String$endsWith$8.call(Unknown Source)
    at com.sysgears.grain.generate.SiteGenerator$_generate_closure1.doCall(SiteGenerator.groovy:83)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at groovy.lang.Closure.call(Closure.java:423)
    at groovy.lang.Closure.call(Closure.java:439)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1324)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1296)
    at org.codehaus.groovy.runtime.dgm$147.invoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.sysgears.grain.generate.SiteGenerator.generate(SiteGenerator.groovy:81)
    at com.sysgears.grain.generate.SiteGenerator$generate.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at com.sysgears.grain.Application.run(Application.groovy:131)
    at com.sysgears.grain.Application$run.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at com.sysgears.grain.Main.main(Main.groovy:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sysgears.grain.SiteLauncher.run(SiteLauncher.java:111)
    at com.sysgears.grain.SiteLauncher.main(SiteLauncher.java:40)

Freezes somewhere inside Ruby on generate

I've got generate task configured like this:

task generate(type: JavaExec, dependsOn: ":site:gather") {
    group 'grain'
    logging.captureStandardOutput LogLevel.INFO
    classpath sourceSets.main.runtimeClasspath
    main = mainClassName
    args["generate"]
    doFirst {
        println "Starting generate"
    }
}

When I try to run it, gradle freezes on generate task without even displaying Starting generate. VisualVM shows that execution freezes somewhere inside JRuby thread selector. When I try to force use newer version of JRuby: compile 'org.jruby:jruby:9.1.10.0', I get the error: Exception in thread "Thread-22" java.lang.NoSuchMethodError: jnr.constants.platform.OpenFlags.defined()Z. So it is probably JRuby or ruby script bug.

Display a nice error for commands instead of a stack trace

Here's an example :
When typing :

$ grainw create-post

Grain displays this stack trace :

java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at org.codehaus.groovy.runtime.metaclass.TransformMetaMethod.invoke(TransformMetaMethod.java:55)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass$1.invoke(ClosureMetaClass.java:259)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at com.sysgears.grain.Application.run(Application.groovy:120)
at com.sysgears.grain.Application$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
at com.sysgears.grain.Main.main(Main.groovy:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sysgears.grain.SiteLauncher.run(SiteLauncher.java:110)
at com.sysgears.grain.SiteLauncher.main(SiteLauncher.java:39)

I think it would be better to handle this error and display an help for the command. For example :

create-post needs 1 argument
grainw create-post

Portability problems

Grain works fine when one use one of given templates, but there a quite a lot of little annoying problems, when one tries to create his own template or move installation.

  • project group can not be changed from com.sysgears.grain. Main class name is bound to it and it seams that some internal features as well, because project would not compile if group name is changed.
  • groovy source code classes are bound to com\sysgears\theme\ directory. I tried to move them to another directory and change imports in SiteConfig, but got some NPEs. It is not very easy to access these files and I do not see any reason for complicated directory structure since there are no name conflicts. I also do not understand the purpose of Launcher.java class since it just point to some internal launcher.
  • SiteConfig.groovy has direct class imports which is not very good idea if it is intended as a configuration file. If one moves this classes or uses custom ones, he should replace all imports? It is better to use fully qualified class names and reflects to invoke user classes.
  • generally in gradle all temporary files and build results are stored inside build directory. Is there a reason to store target and caches in project root? If they are all in one directory, than it is easier to clean.
  • gradle plugin has some strange behavior. It should seem to replace build.gradle in theme projects and work directly with the source code, but instead it just creates 'project in project' in the source folder with its own build gradle. It is alright if one works with pre-built theme and does not use any external data but when one needs to design his own theme or include some data from the project in the site (for example JavaDoc), it is not convenient at all.

In my opinion, it would be good to add additional flexibility to plugin and completely remove this 'project in project' structure, storing all configuration in gradle file or in separate groovy configuration file.

Help to integrate Jekill module to import wordpress sites

Hi all,

I'd like to use Grain for our corporate website but some people would rather use Jekill although we are all mostly Java and Groovy developers. Since Grain already uses some Ruby modules I was wondering how hard would it be to integrate the Wordpress import module from Jekill. We would be happy to collaborate if we get some indications.

Thanks

The option to split Yaml & content

Hello,

I have a little but very annoying usability issue. Now content file represents two types: yaml & layout (md, html...). It's quite convenient but my IDE (Intellij IDEA) goes crazy. Code formatting feature cannot work properly and I have to select layout code every time before formatting to prevent yaml part "deindentation".
Can these types of content file be split? For example to optional *.yml file.

Thanks

`page.url` ignores directory in site url

The property 'page.url' returns location instead of url. If site url includes directory like my.site.com/directory and real page url is my.site.com/directory/page.html, the page.url returns my.site.com/page.html.

Different `index.html` reference in preview and generate

The problem I encountered second time. During preview phase index.html has location / but after generate it is actually index.html and / points to directory root. A problem arises when I want to place a link to a home page or inject resources into index.
Is there a universal way to reference a page and find it in resources?

Customizing resource mapping to add new binary types

I I have non-image assets that are treated as binary files (pdfs, for instance). I'm not seeing how to customize resource mapping to make that happen.

I see that DefaultConfig.groovy (in grain itself) has a 'binary_files" var that appears to control what the default binary files are. It'd be nice to simply add another regex to that, but it's not clear how to do so.

I've tried customizing the ResourceMapper in the theme (I'm using the template theme) but my code doesn't appear to be being hit. I've tried logging and even throwing exceptions from inside ResourceMapper but nothing seems to produce any visible effect.

Here's the error I'm seeing:

Caused by: com.sysgears.grain.render.RenderException: Failed to parse /home/mbp/dev/piercelab/grain-theme-template/theme/......./filename.pdf script: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
GrainScript7.groovy: 415: unexpected char: 0x11 @ line 415, column 99.

   �7����K�����A����
                    ���:${<6���

allow SiteConfig to specify attributes for Asciidoctor.convert

For instance I want to pass:

"icons" => "font"

to convert in tools/asciidoc-bridge/asciidoc_bridge.rb, and I may not want coderay highlighter.

Eg in SiteConfig I want to put:

asciidoc {
    opts = [
        "source-highlighter" : "highlightjs",
        icons : "font",
    ]
}

and have that passed through.

StackOverflow during generate

Preview is working fine but when i am trying to either run generate task or run grainw.generate, I am getting StackOveflow cycle:

java.lang.StackOverflowError
    at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72)
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.MethodMetaProperty$GetBeanMethodMetaProperty.getProperty(MethodMetaProperty.java:73)
    at org.codehaus.groovy.runtime.callsite.GetEffectivePogoPropertySite.callGetProperty(GetEffectivePogoPropertySite.java:47)
    at com.sysgears.grain.translator.writer.ScriptWriter.calculateMaxChars(ScriptWriter.groovy:55)
    at com.sysgears.grain.translator.writer.ScriptWriter.write(ScriptWriter.groovy:84)
    at com.sysgears.grain.translator.writer.ScriptWriter.write(ScriptWriter.groovy)
    at com.sysgears.grain.translator.writer.ScriptWriter$write$2.callCurrent(Unknown Source)
    at com.sysgears.grain.translator.writer.ScriptWriter.write(ScriptWriter.groovy:89)
    at com.sysgears.grain.translator.writer.ScriptWriter.write(ScriptWriter.groovy)
    at com.sysgears.grain.translator.writer.ScriptWriter$write$2.callCurrent(Unknown Source)
    at com.sysgears.grain.translator.writer.ScriptWriter.write(ScriptWriter.groovy:89)
...

I am getting the same behavior with gradle 1.8 and 2.6.

Update:
With little debugging I found that problem is narrowed to this method:

    private def calculateMaxChars(StatementType statement) {
        def maxChars = MAX_LINE_LENGTH - statement.closeStr.trim().length() - lineLength
        if (curStatement != statement) {
            maxChars -= curStatement.closeStr.trim().length() + statement.openStr.length()
        }

        maxChars
    }

With curStatement = "PLAIN_CODE" and statment = "GSTRING_WRITE" it always produces zero which causes the loop.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.