Java“常量字符串太长”编译错误。 仅在使用Ant时发生,而在使用Eclipse时不发生
我在一类中有一些很长的字符串用于初始化用户信息。 在Eclipse中编译时,没有任何错误或警告,并且生成的.jar运行良好。
最近,我决定创建一个要使用的ant构建文件。 每当我用ant编译同一类时,都会收到“常量字符串太长”的编译错误。 我尝试了多种方法来设置ant中的java编译器可执行文件,以确保使用的版本与Eclipse中的版本完全相同。
我宁愿弄清楚如何获得与Ant在Eclipse中获得的相同的成功编译,而不是尝试重新编写代码以动态地连接字符串。
Allan asked 2020-07-10T14:22:52Z
9个解决方案
39 votes
有人试图向您发送消息:-)在花时间摆弄编译器版本时,您可能已经从文本文件中加载了数据-可能是文本文件所在的位置。
退房:
java.util.Properties
Apache Commons FileUtils.readFileToString()
teabot answered 2020-07-10T14:23:20Z
32 votes
我发现我可以使用apache commons lang StringUtils.join(Object [])方法来解决这个问题。
public static final String CONSTANT = org.apache.commons.lang.StringUtils.join( new String[] {
"This string is long",
"really long...",
"really, really LONG!!!"
} );
mrswadge answered 2020-07-10T14:23:40Z
6 votes
以上对我没有任何作用。 我已经创建了一个名称为test.txt的文本文件,并使用以下代码读取了该文本文件
String content = new String(Files.readAllBytes(Paths.get("test.txt")));
Amol Suryawanshi answered 2020-07-10T14:24:01Z
5 votes
类文件中字符串常量的长度在UTF-8编码中限制为2 ^ 16字节,这不应取决于所使用的编译器。 也许您在ant文件中使用的字符集与在eclipse中使用的字符集不同,因此某些字符比以前需要更多的字节。 请检查javac任务的encoding属性。
Jörn Horstmann answered 2020-07-10T14:24:25Z
1 votes
如果确定要在源中放入长字符串,则另一个技巧是避免编译器将其检测为常量表达式。
String dummyVar = "";
String longString = dummyVar +
"This string is long\n" +
"really long...\n" +
"really, really LONG!!!";
这工作了一段时间,但是如果您走得太远,下一个问题就是编译器中的堆栈溢出。 这描述了相同的问题,并且如果您仍然确定的话,将描述如何增加堆栈-问题似乎是现在方法的绝对大小。 同样,在Eclipse中这不是问题。
df778899 answered 2020-07-10T14:24:50Z
0 votes
你有尝试过吗? 我自己从未尝试过,但这是相关的部分:
使用ant javac适配器可以使用javac适配器在Ant脚本中使用Eclipse编译器。 为了使用Eclipse编译器,您只需要在脚本中定义build.compiler属性。 这是一个小例子。
我真的会考虑使您的类标准兼容。 我相信官方的限制是65535,而Eclipse更宽容的事实在最不方便的时候可能会改变您的情况,无论是哪种方式不断地使用Eclipse编译项目,都可能真的开始限制您。 很多方法。
Yishai answered 2020-07-10T14:25:20Z
0 votes
String theString2 = IOUtils.toString(new FileInputStream(new
File(rootDir + "/properties/filename.text")), "UTF-8");
Monis Majeed answered 2020-07-10T14:25:36Z
0 votes
将字符串添加到values / strings.xml中,而不是调用getResources.getString(R.string.yourstring)
xevser answered 2020-07-10T14:25:56Z
-4 votes
你可以试试看
public static final String CONSTANT = new StringBuilder("Your really long string").toString();
Johjen K Mathew answered 2020-07-10T14:26:17Z