Plugin takes this long to build
dbclkclk opened this issue · 13 comments
Hey question:
Why does maven grunt takes this long to build (4 hrs):
Reading C:\Users\User\git\XXXXXX\XXXXXX\target-grunt\dist\test\services\ServiceSpec.js...OK
Writing C:\Users\User\git\XXXXXX\XXXXXX\target\XXXXXX-frontend\resources\js\test\services\ServiceSpec.js...OK
Done, without errors.
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ XXXXXX-frontend ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\User\git\XXXXXX\XXXXXX\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:testCompile (default-testCompile) @ XXXXXX-frontend ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.16:test (default-test) @ XXXXXX-frontend ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (default) @ XXXXXX-frontend ---
[INFO] Executing tasks
[echo] Using Dev environment
[INFO] Executed tasks
[INFO]
[INFO] --- maven-war-plugin:2.3:war (default-war) @ XXXXXX-frontend ---
[INFO] Packaging webapp
[INFO] Assembling webapp [XXXXXX-frontend] in [C:\Users\User\git\XXXXXX\XXXXXX\target\XXXXXX-frontend]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\Users\User\git\XXXXXX\XXXXXX\src\main\webapp]
[INFO] Webapp assembled in [27556 msecs]
[INFO] Building war: C:\Users\User\git\XXXXXX\XXXXXX\target\XXXXXX-frontend.war
[INFO]
[INFO] --- maven-dependency-plugin:2.3:copy (default) @ XXXXXX-frontend ---
[INFO] Configured Artifact: org.mortbay.jetty:jetty-runner:7.4.5.v20110725:jar
[INFO] org.mortbay.jetty:jetty-runner:7.4.5.v20110725:jar already exists in C:\Users\User\git\XXXXXX\XXXXXX\target\dependency
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:36 h
[INFO] Finished at: 2015-03-16T05:36:39-04:00
[INFO] Final Memory: 14M/155M
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0
Oh wow, never seen anything like this, do you have any custom tasks? If you run grunt from targe-tgrunt
, does it also take so long to finish?
@adamdubiel no custom tasks. From the image, for the most part it's basically just stuck there until it starts copying in the target-grunt folder. The actual command you want me to run is mvn target-grunt
?
Also, this is my grunt file:
module.exports = function(grunt){
grunt.initConfig({
gruntMavenProperties: grunt.file.readJSON('grunt-maven.json'),
bgShell:{
fail:true,
npm_install:{
cmd:'npm install'
},
bower_install:{
cmd:'bower install'
}
},
mavenPrepare: {
options: {
resources: ["**"]
},
prepare: {}
},
mavenDist: {
options: {
warName: 'cointraders-frontend',
deliverables: ['**', '!non-deliverable.js'],
gruntDistDir: 'dist'
},
dev: {
warName: 'war-dev'
}
},
karma: {
web: {
configFile:'karma/karma.conf.js'
},
web_ci:{
options:{
singleRun:true,
watch:false
},
configFile:'karma/karma.conf.js'
}
},
jshint: {
all:{
options: {
jshintrc: true
},
files: {
src: [
'app/**/*.js','app/*.js',
'controllers/**/*.js','controllers/*.js',
'services/**/*.js','services/*.js',
'directives/**/*.js','directives/*.js'
]
}
}
},
watch:{
maven: {
files: ['<%= gruntMavenProperties.filesToWatch %>'],
tasks: 'default'
}
},
concurrent:{
options: {
logConcurrentOutput: true
},
test:['karma:web_ci','jshint:all']
},
cssmin: {
core: {
expand: true,
cwd: '../css/',
src: ['*.css', '!*.min.css'],
dest: 'mcss/dist',
ext: '.min.css'
}
},
uglify: {
core: {
options: {
mangle: false
},
files: [{
expand: true,
src: [
'app/**/*.js','app/*.js',
'controllers/**/*.js','controllers/*.js',
'services/**/*.js','services/*.js',
'directives/**/*.js','directives/*.js'
//,'test/**/**/*.js', 'test/**/*.js','test/*.js'
],
dest: 'ujs/dist/',
ext: '.min.js'
}]
}
},
concat:{
js: {
options: {
// Replace all 'use strict' statements in the code with a single one at the top
banner: "'use strict';\n",
process: function(src, filepath) {
return '// Source: ' + filepath + '\n' +
src.replace(/(^|\n)[ \t]*('use strict'|"use strict");?\s*/g, '$1');
}
},
src: ['ujs/dist/**/*.min.js'],
dest: 'ujs/dist/index.min.js'
},
css: {
src: ['mcss/dist/**/*.min.css'],
dest: 'mcss/dist/app.min.css'
}
},
lifecycle: {
validate: [
'jshint'
],
test: [
'bgShell:npm_install',
'bgShell:bower_install',
'karma:web_ci'
],
package: [
'cssmin',
'uglify',
'concat'
]
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-concurrent');
grunt.loadNpmTasks('grunt-karma');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-build-lifecycle');
grunt.loadNpmTasks('grunt-bg-shell');
grunt.loadNpmTasks('grunt-maven');
grunt.registerTask('qa',['mavenPrepare','mavenDist']);
grunt.registerTask('ci',['mavenPrepare','concurrent','mavenDist']);
grunt.registerTask('default', ['mavenPrepare','concurrent','mavenDist']);
};
I would like you to go into target-grunt
directory in project root and run grunt
, to see how much time will it take for vanilla grunt tasks.
this issue can be closed, had a trojan that replicated my target directory into a file size of 3 Gigs.
went as far as this for the directorty structure C:\Users\xxxx\TARGET~1\dist\dist\dist\dist\dist\dist\dist\NODE_M~1\bower\NODE_M~1\insight\NODE_M~1\inquirer\NODE_M~1\CLI-CO~1\NODE_M~1\memoizee\NODE_M~1\ES6-WE~1\NODE_M~1\ES6-IT~1\NODE_M~1\es6-symbol\test
If you have the same issue when running vanilla grunt
in target-grunt, it means there is something strange with your grunt build. Can you disable (remove if you like) mavenPrepare
and mavenDist
tasks and run it once again to rule them out?
@adamdubiel Will do in a moment. One other question, does maven-grunt task clean
relies on the maven-clean-plugin
? In my case, I don't have it and I believe this plugin uses it to clean the target-grunt directory each time it's executed.
target-grunt
does not get cleaned unless you specifically call mvn grunt:clean
.
@adamdubiel i disabled those tasks and removed the 'target-grunt' long with the 'target' directory and things seems to sped up. Not sure what I'm doing wrong.
From the get go, I run mvn install
to get all dependency (maven and grunt dependencies) and then run Tomcat. I figure by running mvn install
, the grunt tasks are somehow injected into the normal maven lifecycle.
Subsequently, when I make modification to my js files, I run mvn test
, to redeploy the grunt dependencies into the target-grunt directory (which after build, gets copied to the target directory).
Also, again why does the plugin creates so many levels deep in the target-grunt
and target
directories: `C:\Users\xxxx\TARGET1\dist\dist\dist\dist\dist\dist\dist\NODE_M1\bower\NODE_M1\insight\NODE_M1\inquirer\NODE_M1\CLI-CO1\NODE_M1\memoizee\NODE_M1\ES6-WE1\NODE_M1\ES6-IT1\NODE_M1\es6-symbol\test'.
See the many dist
and NODE_M~1
directories? If i'm missing something here, let me know.
Thanks
I"m not sure why is it that each time mvn grunt:grunt -Dtarget=watch
fires (due to changes) or just the normal maven install
, this plugin creates additional dist
directories in the target-grunt
directory (which gets copied to target
directory). I had so many dist
created, i couldn't delete them because, Windows was complaining I had too many (path too long). I had to mount a new drive to lower levels of the dist
directories and remove them (incrementally).
Example, after I manually deleted the target
and target-watch
directories, run maven install
(which would recreate the target
and target-grunt
directories) and then run tomcat. I then ran the command mvn grunt:grunt -Dtarget=watch
and made changes to my file, this would cause the build to run a second time. When I check the console, I'm seeing a second level dist
directory being created:
Reading C:\Users\xxxxxxgit\xxxxxx\xxxxxxx-web\xxxxxxx_web\target-grunt\dist\node_modules\bower\node_modules\inquirer\node_modules\cli-color\node_modules\es5-ext\n ode_modules\es6-symbol\polyfill.js...OK
Writing C:\Users\xxxxxxx\git\xxxxx\xxxxxxx-web\xxxxxxx_web\target-grunt\dist\dist\node_modules\bower\node_modules\inquirer\node_modules\cli-color\node_modules\es5- ext\node_modules\es6-symbol\polyfill.js
See the writing
statement above and 2 dist
directories created.
There should be just one dist
, not many - this leads to some error in Grunt configuration, but since your config is quite big, i don't see any immediate suspect. How about trimming your Gruntfile piece by piece until you get to the moment where it does not create those dist
s anymore? You can even start with mavenPrepare
and mavenDist
.