我试图阻止IntelliJ将生成的文件放在我的主源文件夹中.这些生成的.java文件干扰了我与其他工具一起使用的glob规则.(想想find -name '*.java'
.)
对于Android开发,我似乎能够自定义R.java
从AIDL编译器生成的输出目录和文件,但IntelliJ似乎一直在创建gen/
目录和BuildConfig.java
在源代码树中编写文件.有什么办法可以阻止它吗?
我意识到通常,gen/
文件夹是在文件夹旁边创建的src/
,但在我的情况下,我使用的是:
<sourceFolder packagePrefix="com.example" />
Run Code Online (Sandbox Code Playgroud)
所以在下面gen/
创建的目录com.example
看起来像一个新的包(com.example.gen
)而不是.
我在IntelliJ中有以下目录结构,其中包含一个Android库项目:
java/com/example/base/AndroidManifest.xml
java/com/example/base/assets # contains Android assets
java/com/example/base/res # contains Android resources
java/com/example/base/Base.java
java/com/example/base/base.iml
Run Code Online (Sandbox Code Playgroud)
将base.iml
包含以下内容:
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$"
isTestSource="false"
packagePrefix="com.example.base" />
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/res" />
</content>
Run Code Online (Sandbox Code Playgroud)
当我构建一个依赖于我的库项目的Android应用程序项目时,我收到一个错误:
[myapp] java.util.zip.ZipException: duplicate entry: res/drawable/image_shadow.9.png
Run Code Online (Sandbox Code Playgroud)
在项目结构对话框中,我配置项目编译器的输出是一个out
我的项目的根目录下.当我尝试构建我的Android项目时,我注意到我的Android资源的副本最终在该out/production/base/com/example/base/res/
文件夹下.
我的假设是我的Android资源被视为"普通"Java资源(您将加载使用的类型Class.getResource()
),这就是他们被复制到的out/production
原因,这反过来导致duplicate entry
我看到的异常.
不知道是不是这样的话?如果是这样,我该如何防止这些文件被复制?在Eclipse中,文件中的<classpathentry>
元素.classpath
具有一个excluding
属性,该属性采用glob模式来防止这种行为.
我意识到有大量的Node模块提供了用于解析JSON的异步API,但是它们中的许多似乎都读取整个文件或流到内存中,构造一个巨大的字符串,然后将其传递给JSON.parse()
.这就是"如何使用NodeJS解析JSON?"的第二个答案.建议,并且正是jsonfile模块所做的.
构建一个巨大的字符串正是我想要避免的.我想要一个像这样的API:
parseJsonFile(pathToJsonFile): Promise
其中,Promise
被返回解析为解析的JSON对象.此实现应使用恒定的内存量.我对任何类似SAX的东西都不感兴趣,因为各种各样的部分被解析后广播事件:只是最终的结果.
我认为jsonparse可能会做我想要的(它显然包括解析JSON而不使用的逻辑JSON.parse()
),但是没有简单的例子README.md
,而examples目录中的一个文件似乎过于复杂.
我试图通过从命令行使用aapt来构建R.java.我指定多个-S
目录,因为我有多个res
目录.我正在建设中使用:
aapt package \
-M AndroidManifest.xml \
-m -J gen \
-S src/com/example/res \
-S src/com/example/ui/res
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误:
src/com/example/ui/res/values/strings.xml:2: error: Resource at app1_name appears in overlay but not in the base package; use <add-resource> to add.
Run Code Online (Sandbox Code Playgroud)
目前,src/com/example/ui/res/values/strings.xml
包含以下内容:
<resources>
<string name="app1_name">MyAppName</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
我宁愿不必改为:
<resources>
<add-resource type="string" name="app1_name">MyAppName</add-resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
(这是在https://groups.google.com/forum/?fromgroups#!topic/android-porting/bYfeLEjERjg上建议的,虽然它似乎无法解决我的问题.)
我是否因为期望-S
论证如何运作而误入歧途?
我能想到的唯一解决方法是将所有-S
目录作为根res
目录的子目录进行符号链接,并指定res
为唯一的-S
目录.
我遇到了 Rhino在通过javax.script.ScriptEngine
API 运行Rhino时抛出"编译脚本时遇到的代码生成错误:方法生成的字节码超过64K限制"异常的问题.接受的解决方案似乎是要调用setOptimizationLevel(-1)
的sun.org.mozilla.javascript.Context
.
不幸的是,我似乎无法访问由Context
该创建的ContextFactory
.我曾尝试加入ContextFactory.Listener
到ContextFactory.getGlobal()
将修改Context
创建之后,但我的听众似乎永远不会被调用.我还看了一下来自Java 6的RhinoScriptEngine源,看看是否有一个我可以设置的属性,ContextFactory
以便确定优化级别的值.
据我所知,在Java 7中,RhinoScriptEngine
设置优化级别-1
默认,并能够通过设置的优化级别rhino.opt.level
属性.比较makeContext()
方法在Java 7的版本与makeContext()
在方法的Java 6版本,看看我的意思.
据我所知,我认为我最好的选择是直接运行Rhino,如使用Rhino运行CoffeeScript编译器的示例所示.虽然你可以看到,代码很麻烦,所以javax.script.ScriptEngine
如果可能的话,我宁愿使用API,同时继续支持Java 6.还有其他选择吗?
使用Javadoc时是否可以将警告视为错误?特别是,我从Ant调用Javadoc并且已经完成failonerror="true"
了我的<javadoc>
任务,但我似乎无法触发它.即使javadoc
正在生成警告,我仍然得到Ant完成时BUILD SUCCESSFUL
的退出代码0
.
我希望能够additionalparam
在<javadoc>
任务的属性中添加一些东西来强制Javadoc警告失败.
我想.java
从IntelliJ中的内容根中排除单个文件."从项目中排除文件"的文档表明这是不可能的(它明确说明此操作不适用于Java文件和二进制文件.)
由于对这样的限制不以为然,我尝试编辑我的.iml
文件,乐观地插入元素<excludeFile>
下的XML元素<content>
,但似乎没有任何东西.
有没有人知道这样做的方法(记录或其他方式)?或者有任何线索为什么不支持此功能?相比之下,Eclipse允许其文件中including
的<classpathentry>
元素具有任意模式.classpath
.
我在Ubuntu 11.04上运行Eclipse 3.6(Helios 20110218-0911).在"首选项"下,我转到了以下面板:
JavaScript - >编辑器 - >保存操作.
选中"附加操作"复选框,并选中"删除所有行上的尾随空格".
然而,当我在Eclipse中保存我的JavaScript文件时,我的行尾仍然有尾随空格.
我错过了什么?
在 BuildBot 中是否可以有多个源签出步骤?我找不到任何明确的文档,但似乎在 BuildBot 中进行源代码检出也会将当前工作目录更改为检出目录,这意味着不清楚从另一个存储库“去”哪里检出然后运行一个同时使用两者的脚本。
考虑http://buildbot.net/buildbot/docs/0.8.1/BuildFactory.html 中的示例:
从这些步骤来看,似乎执行了 CVS 检出,然后make build
运行。那是BuildBot中的两步,很方便。
但是,如果您从命令行执行等效操作,则需要三个步骤:
cvs co $CVSROOT
cd directory_that_was_created
make build
Run Code Online (Sandbox Code Playgroud)
该cd directory_that_was_created
步骤在 BuildBot 中发生在哪里?
但更重要的是,如果我想要两个source.CVS
(嗯,真的source.Git
)步骤怎么办?运行第二步后我在哪个目录?第二个 repo 是否最终位于第一个 repo 的子目录中?
使用 Git,我似乎可以将一个模块作为另一个模块的子模块,以确保它们都在一个步骤中被检出,但如果可能的话,我宁愿不这样做。
以下命令不会产生相同的输出:
cat .git/objects/96/d0745960850e8ac97406311f3288b6d035cefc
git show --raw 96d0745960850e8ac97406311f3288b6d035cefc
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种选项git show
和git cat-file
,但我似乎无法让事情匹配。我觉得应该以某种方式支持这一点。
具体来说,我想要文档格式。也就是说,我希望看到标题、空字节等。
如果我运行:
cat .git/objects/96/d0745960850e8ac97406311f3288b6d035cefc | zlib-deflate | hexdump
Run Code Online (Sandbox Code Playgroud)
我看到该行开头为:
0000000 62 6c 6f 62
Run Code Online (Sandbox Code Playgroud)
正如我所期望的那样,它对应于“b”“l”“o”“b”。
如果你好奇,我的zlib-deflate
脚本的内容是:
#!/usr/bin/env python
# Deflates a stream of bytes compressed via zlib that are passed to stdin.
import io
import sys
import zlib
# /sf/ask/424562141/
reader = io.open(sys.stdin.fileno(), mode='rb', closefd=False)
data = reader.read()
print zlib.decompress(data)
Run Code Online (Sandbox Code Playgroud)