我正在尝试从Gradle构建中设置环境变量.我在MacOS X(El Capitan)上.该命令是"gradle test".
我在build.gradle中尝试这个:
task setenv(type: Exec) {
commandLine "export", "SOME_TEST_VAR=aaa"
}
test.dependsOn setenv
Run Code Online (Sandbox Code Playgroud)
并且构建失败:
任务':myproject:setenv'的执行失败.
启动进程'命令'导出'出现问题''
我也试过这个:
test.doFirst {
ProcessBuilder pb1 = new ProcessBuilder("export SOME_TEST_VAR=some test value")
pb1.start();
}
Run Code Online (Sandbox Code Playgroud)
构建成功.但是,如果我在JUnit测试中检查环境变量,它将失败:
assertTrue(System.getenv().containsKey("SOME_TEST_VAR"));
Run Code Online (Sandbox Code Playgroud)
有没有办法从Gradle构建(在build.gradle文件中)设置环境变量?
更新:
我已经单独测试了它:值传递了,我的测试任务收到了所有东西,无论是systemProperty,环境变量还是jvmArgs.
所以,Gradle本身并没有错.
当我在真实项目上尝试它时,问题就出现了.它使用Spring进行依赖注入.我可能错了,但看起来Spring框架在某处清除了这些值.
该子项目目前正在冻结,我现在无法详细检查我的猜测.
我有Windows 7,Java 8,Maven和Eclipse.我创建了一个Maven项目和使用几乎一模一样的代码在这里.
这只是一个简单的"字数统计"样本.我尝试从Eclipse启动"驱动程序"程序,我提供命令行参数(输入文件和输出目录)并获得以下错误:
Exception in thread "main" java.lang.NullPointerException at
java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) at
org.apache.hadoop.util.Shell.runCommand(Shell.java:404) at
org.apache.hadoop.util.Shell.run(Shell.java:379) at
org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:678) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at
org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435) at
org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277) at
org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:422) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at
org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286) at
misc.projects.hadoop.exercises.WordCountDriverApp.main(WordCountDriverApp.java:29)
Run Code Online (Sandbox Code Playgroud)
失败的行(WordCountDriverApp.java:29)包含启动作业的命令:
job.waitForCompletion(true)
我想让它工作,因此我想了解一些事情:
我是否必须提供任何hdfs-site.xml,yarn-site.xml,...所有这一切,如果我只想要本地模式(没有任何集群)?我现在没有这些XML配置文件.据我所知,本地模式的默认值都可以,也许我错了.
在Windows下完全可以(无论是启动任何Hadoop任务)还是整个Hadoop都只有Linux?
PS:Hadoop依赖关系如下:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我正在使用Play framework 2.3.
当我运行activator testOnly controller.MyTestClassName.*它时,运行所有测试(包括MyTestClassName),就像activator test它一样.
我只需要运行一些测试.怎么做?