Repository: ambari Updated Branches: refs/heads/feature-branch-AMBARI-21307 3deab6d18 -> 25fa701c3 (forced update)
http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.ttf ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.ttf b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.ttf new file mode 100755 index 0000000..1413fc6 Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.ttf differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff new file mode 100755 index 0000000..9e61285 Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff2 ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff2 b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff2 new file mode 100755 index 0000000..64539b5 Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/fonts/glyphicons-halflings-regular.woff2 differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-bolt.png ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-bolt.png b/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-bolt.png new file mode 100644 index 0000000..f3eb3db Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-bolt.png differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-spout.png ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-spout.png b/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-spout.png new file mode 100644 index 0000000..9153d26 Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/img/icon-spout.png differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/app/styles/img/loader.gif ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/app/styles/img/loader.gif b/contrib/views/storm/src/main/resources/ui/app/styles/img/loader.gif new file mode 100644 index 0000000..766329d Binary files /dev/null and b/contrib/views/storm/src/main/resources/ui/app/styles/img/loader.gif differ http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/config/webpack.config.base.js ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/config/webpack.config.base.js b/contrib/views/storm/src/main/resources/ui/config/webpack.config.base.js new file mode 100644 index 0000000..b3582ab --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/config/webpack.config.base.js @@ -0,0 +1,101 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at +* + http://www.apache.org/licenses/LICENSE-2.0 +* + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +**/ + +const path = require('path'); +const webpack = require('webpack'); +const autoprefixer = require('autoprefixer'); + +module.exports = { + // target: 'node', + node: { + fs: "empty" + }, + output: { + filename: 'js/[name].js', + path: path.resolve(__dirname, '../public'), + publicPath: '/' + }, + resolve: { + modules: [ + path.join(__dirname, '../app/scripts'), + 'node_modules' + ], + alias: { + //models: path.join(__dirname, '../src/client/assets/javascripts/models') + }, + extensions: ['.js', '.jsx', '.json', '.scss','.css'] + }, + plugins: [ + /*new webpack.ProvidePlugin({ + 'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch' // fetch API + }),*/ + // Shared code + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + filename: 'js/vendor.bundle.js', + minChunks: Infinity + }) + ], + module: { + preLoaders: [ + // Javascript + { + test: /\.jsx?$/, + loader: 'eslint' + } + ], + loaders: [ + // JavaScript / ES6 + { + test: /\.jsx?$/, + include: path.join(__dirname, '../app'), + loader: 'babel' + }, + // Images + // Inline base64 URLs for <=8k images, direct URLs for the rest + { + test: /\.(png|jpg|jpeg|gif|svg)$/, + loader: 'url', + query: { + limit: 8192, + name: 'images/[name].[ext]?[hash]' + } + }, + // Fonts + { + test: /\.(woff|woff2|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/, + loader: 'url', + query: { + limit: 8192, + name: 'fonts/[name].[ext]?[hash]' + } + } + ] + }, + postcss: function() { + return [ + autoprefixer({ + browsers: ['last 2 versions'] + }) + ]; + }, + eslint: { + failOnWarning: false, + failOnError: true + } +}; http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/config/webpack.config.development.js ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/config/webpack.config.development.js b/contrib/views/storm/src/main/resources/ui/config/webpack.config.development.js new file mode 100644 index 0000000..873cd47 --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/config/webpack.config.development.js @@ -0,0 +1,64 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at +* + http://www.apache.org/licenses/LICENSE-2.0 +* + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +**/ + +const merge = require('webpack-merge'); +const webpack = require('webpack'); +const config = require('./webpack.config.base'); +const path = require('path'); +const extractTextPlugin = require("extract-text-webpack-plugin"); + + +const GLOBALS = { + 'process.env': { + 'NODE_ENV': JSON.stringify('development') + }, + __DEV__: JSON.stringify(JSON.parse(process.env.DEBUG || 'true')) +}; + +module.exports = merge(config, { + debug: true, + cache: true, + //devtool: 'cheap-module-eval-source-map', + devtool: 'inline-source-map', + entry: { + application: [ + 'webpack-hot-middleware/client', + 'react-hot-loader/patch', + path.join(__dirname, '../app/scripts/main') + ], + vendor: ['react', 'react-dom', 'react-router'] + }, + plugins: [ + new extractTextPlugin("[name].css"), + new webpack.HotModuleReplacementPlugin(), + new webpack.DefinePlugin(GLOBALS) + ], + module: { + loaders: [{ + test: /\.css$/, + loader: 'style-loader' + }, { + test: /\.css$/, + loader: 'css-loader', + query: { + //modules: true, + localIdentName: '[name]__[local]___[hash:base64:5]' + } + }, ] + } +}); http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/config/webpack.config.production.js ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/config/webpack.config.production.js b/contrib/views/storm/src/main/resources/ui/config/webpack.config.production.js new file mode 100644 index 0000000..a908daf --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/config/webpack.config.production.js @@ -0,0 +1,131 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at +* + http://www.apache.org/licenses/LICENSE-2.0 +* + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +**/ + +const path = require('path'); +const merge = require('webpack-merge'); +const webpack = require('webpack'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const config = require('./webpack.config.base'); + +const GLOBALS = { + 'process.env': { + 'NODE_ENV': JSON.stringify('production') + }, + __DEV__: JSON.stringify(JSON.parse(process.env.DEBUG || 'false')) +}; + +module.exports = merge(config, { + debug: false, + devtool: 'cheap-module-source-map', + entry: { + application: 'main.js', + vendor: ['react', 'react-dom', 'react-router'] + }, + plugins: [ + new CopyWebpackPlugin([{ + from: path.join(__dirname, '../app/styles/img'), + to: 'styles/img' + },{ + from: path.join(__dirname, '../index.html'), + to: 'index.html' + }]), + // Avoid publishing files when compilation fails + new webpack.NoErrorsPlugin(), + new webpack.DefinePlugin(GLOBALS), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false, + 'screw_ie8': true + }, + output: { + comments: false + }, + sourceMap: false + }), + new webpack.LoaderOptionsPlugin({ + minimize: true, + debug: false + }), + new ExtractTextPlugin({ + filename: 'styles/css/style.css', + allChunks: true + }) + ], + module: { + noParse: /\.min\.js$/, + loaders: [ + // Sass + { + test: /\.scss$/, + include: [ + /src\/client\/javascripts/, + /src\/client\/styles/, + /src\/client\/scripts/ + ], + loader: ExtractTextPlugin.extract({ + fallbackLoader: 'style', + loader: [{ + loader: 'css', + query: { + sourceMap: true + } + }, + 'postcss', + { + loader: 'sass', + query: { + outputStyle: 'compressed' + } + } + ] + }) + }, + // Sass + CSS Modules + // { + // test: /\.scss$/, + // include: /src\/client\/assets\/javascripts/, + // loader: ExtractTextPlugin.extract({ + // fallbackLoader: 'style', + // loader: [ + // { + // loader: 'css', + // query: { + // modules: true, + // importLoaders: 1, + // localIdentName: '[path][name]__[local]--[hash:base64:5]' + // } + // }, + // 'postcss', + // { loader: 'sass', query: { outputStyle: 'compressed' } } + // ] + // }) + // }, + // CSS + { + test: /\.css$/, + loader: ExtractTextPlugin.extract({ + fallbackLoader: 'style', + loader: ['css', 'postcss'], + publicPath: '../../' + }) + } + ] + } +}); http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/dev-server.js ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/dev-server.js b/contrib/views/storm/src/main/resources/ui/dev-server.js new file mode 100644 index 0000000..708a662 --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/dev-server.js @@ -0,0 +1,101 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at +* + http://www.apache.org/licenses/LICENSE-2.0 +* + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +**/ + +const path = require('path'); +const express = require('express'); +const webpack = require('webpack'); +const webpackDevMiddleware = require('webpack-dev-middleware'); +const webpackHotMiddleware = require('webpack-hot-middleware'); +// const DashboardPlugin = require('webpack-dashboard/plugin'); +const config = require('./config/webpack.config.development'); + +const app = express(); +const compiler = webpack(config); + +// Apply CLI dashboard for your webpack dev server +// compiler.apply(new DashboardPlugin()); + +const host = process.env.HOST || 'localhost'; +const port = process.env.PORT || 9191; + +function log() { + arguments[0] = '\nWebpack: ' + arguments[0]; + console.log.apply(console, arguments); +} + +app.use(webpackDevMiddleware(compiler, { + noInfo: true, + publicPath: config.output.publicPath, + stats: { + colors: true + }, + historyApiFallback: true +})); + +app.use(webpackHotMiddleware(compiler)); + +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname, './index.html')); +}); +app.use("/", express.static(__dirname + '/app')); + + +//-------------------proxy------------------- + +const proxyMiddleware = require('http-proxy-middleware'); +// Below URL need to be storm server host:port... +const restTarget = 'http://sl-auto-20july-1.openstacklocal:8744'; + +const proxyTable = {}; // when request.headers.host == 'dev.localhost:3000', +proxyTable[host + ':' + port] = restTarget; // override target 'http://www.example.org' to 'http://localhost:8000' + +// configure proxy middleware options +const options = { + target: restTarget, // target host + changeOrigin: true, // needed for virtual hosted sites + ws: true, // proxy websockets + router: proxyTable, + onProxyRes: function(proxyRes, req, res) { + if (proxyRes.headers['set-cookie']) { + var _cookie = proxyRes.headers['set-cookie'][0]; + _cookie = _cookie.replace(/Path=\/[a-zA-Z0-9_.-]*\/;/gi, "Path=/;"); + proxyRes.headers['set-cookie'] = [_cookie]; + } + }, + onProxyReq: function(proxyReq, req, res) { + + }, + onError: function(err, req, res) { + console.log('Error on proxy request'); + } +}; + +const context = ['/api']; // requests with this path will be proxied +const proxy = proxyMiddleware(context, options); + +app.use(proxy); +//-------------------proxy------------------- + +app.listen(port, '0.0.0.0', (err) => { + if (err) { + log(err); + return; + } + + log('ð§ App is listening at http://%s:%s', host, port); +}); http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/index.html ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/index.html b/contrib/views/storm/src/main/resources/ui/index.html new file mode 100644 index 0000000..8baa08d --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/index.html @@ -0,0 +1,47 @@ +<!-- +* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at +* + http://www.apache.org/licenses/LICENSE-2.0 +* +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +---> + +<!DOCTYPE html> +<html class="no-js"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, shrink-to-fit=no, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <title>Storm UI</title> + + <link href="https://fonts.googleapis.com/css?family=Lato:400,400italic,300italic,300,700,700italic" rel="stylesheet" type="text/css"> + <!-- <link rel="stylesheet" type="text/css" href="styles/css/font-awesome.min.css" /> --> + + <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> + <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> + <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + <body> + <div class="loader-overlay displayNone"></div> + <div id="app_container"></div> + <link rel="stylesheet" href="styles/css/style.css"> + <script src="js/vendor.bundle.js"></script> + <script src="js/application.js"></script> + </body> +</html> http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/contrib/views/storm/src/main/resources/ui/package.json ---------------------------------------------------------------------- diff --git a/contrib/views/storm/src/main/resources/ui/package.json b/contrib/views/storm/src/main/resources/ui/package.json new file mode 100644 index 0000000..f9e029b --- /dev/null +++ b/contrib/views/storm/src/main/resources/ui/package.json @@ -0,0 +1,110 @@ +{ + "name": "storm", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "" + }, + "authors": [], + "scripts": { + "start": "node dev-server.js", + "build": "webpack --config ./config/webpack.config.production.js --progress --bail" + }, + "license": "MIT", + "engines": { + "node": "5.3.0" + }, + "dependencies": { + "animate.css": "^3.5.1", + "autoprefixer": "^6.7.2", + "babel-eslint": "^7.1.1", + "babel-core": "^6.11.4", + "babel-loader": "^6.2.10", + "babel-plugin-transform-async-to-generator": "^6.8.0", + "babel-plugin-transform-class-properties": "^6.11.5", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-flow-strip-types": "6.14.0", + "babel-plugin-transform-react-constant-elements": "6.9.1", + "babel-plugin-transform-react-remove-prop-types": "0.2.9", + "babel-plugin-transform-runtime": "6.15.0", + "babel-polyfill": "^6.9.1", + "babel-preset-airbnb": "^2.0.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-react": "^6.11.1", + "babel-preset-stage-0": "^6.5.0", + "eslint": "^3.15.0", + "eslint-config-airbnb": "^14.1.0", + "eslint-friendly-formatter": "^2.0.7", + "eslint-loader": "^1.6.1", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-a11y": "^4.0.0", + "eslint-plugin-react": "^6.9.0", + "babel-root-slash-import": "^1.1.0", + "babel-runtime": "^6.9.2", + "babelify": "^7.3.0", + "bootstrap": "^3.3.7", + "browserify": "^13.1.0", + "browserify-css": "^0.9.1", + "classnames": "^2.2.5", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.24.0", + "del": "^2.2.1", + "dotenv": "^2.0.0", + "express": "^4.14.1", + "extract-text-webpack-plugin": "2.0.0-beta.3", + "file": "^0.2.2", + "file-loader": "^0.10.0", + "font-awesome": "^4.6.3", + "fuzzy": "^0.1.1", + "http-proxy-middleware": "^0.17.3", + "isomorphic-fetch": "^2.2.1", + "jshint": "^2.9.2", + "json-loader": "^0.5.4", + "jsonlint": "^1.6.2", + "lodash": "^4.14.0", + "moment": "^2.14.1", + "postcss-loader": "^1.2.2", + "prop-types": "^15.6.0", + "react": "15.6.2", + "react-bootstrap": "^0.31.3", + "react-bootstrap-switch": "^3.4.5", + "react-breadcrumbs": "^1.3.16", + "react-codemirror": "^0.2.6", + "react-datetime": "^2.5.0", + "react-dom": "15.6.2", + "react-hot-loader": "^3.0.0-beta.3", + "react-onclickoutside": "^5.3.2", + "react-router": "^2.6.0", + "react-router-bootstrap": "^0.23.1", + "react-select": "^1.0.0-beta14", + "react-toastr": "^2.8.0", + "react-treebeard": "^1.1.4", + "react-twitter-typeahead": "^1.1.12", + "react-utils": "^1.0.0", + "reactable": "^0.14.0", + "require-dir": "^0.3.0", + "run-sequence": "^1.2.2", + "style-loader": "^0.13.1", + "system": "^1.0.6", + "url-loader": "^0.5.7", + "vinyl-source-stream": "^1.1.0", + "watchify": "^3.7.0", + "webpack": "2.1.0-beta.21", + "webpack-dev-middleware": "^1.10.0", + "webpack-hot-middleware": "^2.16.1", + "webpack-merge": "^2.6.1", + "d3": "3.5.17", + "d3-tip": "^0.7.1" + }, + "devDependencies": { + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "dagre-d3": "^0.4.17", + "eslint-plugin-header": "^1.0.0", + "eslint-plugin-html": "^3.2.2", + "path": "^0.12.7", + "react-tools": "^0.13.3", + "react-transform": "0.0.3" + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/5bdede50/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 37bb137..97900f3 100644 --- a/pom.xml +++ b/pom.xml @@ -359,9 +359,10 @@ <exclude>contrib/views/slider/src/main/resources/ui/app/assets/javascripts/**</exclude> <exclude>contrib/views/slider/src/main/resources/ui/bower_components/**</exclude> <exclude>contrib/views/slider/src/main/resources/ui/runner.js</exclude> - <exclude>contrib/views/storm/src/main/resources/libs/**</exclude> - <exclude>contrib/views/storm/src/main/resources/styles/default.css</exclude> - <exclude>contrib/views/storm/src/main/resources/templates/**</exclude> + <exclude>contrib/views/storm/src/main/resources/ui/.*</exclude> + <exclude>contrib/views/storm/src/main/resources/ui/node_modules/**</exclude> + <exclude>contrib/views/storm/src/main/resources/ui/public/**</exclude> + <exclude>contrib/views/storm/src/main/resources/ui/app/styles/**</exclude> <exclude>contrib/addons/package/deb/nagios_addon_deb_control</exclude> <exclude>contrib/addons/src/addOns/nagios/conf.d/hdp_mon_nagios_addons.conf</exclude> <exclude>contrib/views/*/.classpath</exclude>