java.lang.NoSuchFieldError:来自带twilio的linux终端的DEF_CONTENT_字符集

java.lang.NoSuchFieldError:来自带twilio的linux终端的DEF_CONTENT_字符集,java,linux,terminal,twilio,javac,Java,Linux,Terminal,Twilio,Javac,在从CentOS终端运行的一个小型java程序中,当我在CentOS 7终端键入java-cp..。/dependencies/*“mainpackage.SendText xxxxxxxxx hellother时,我得到一个java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET错误如何解决此错误,使程序能够从命令行成功运行? 终端输入和输出如下: [user@domain bin]$ java -cp .:"../dependencies/*" mainp

在从CentOS终端运行的一个小型java程序中,当我在CentOS 7终端键入
java-cp..。/dependencies/*“mainpackage.SendText xxxxxxxxx hellother
时,我得到一个
java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET
错误如何解决此错误,使程序能够从命令行成功运行?

终端输入和输出如下:

[user@domain bin]$ java -cp .:"../dependencies/*" mainpackage.SendText xxxxxxxxxx HelloThere
Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175)
at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158)
at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448)
at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:151)
at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:110)
at mainpackage.SendText.main(SendText.java:20)
我读到,该问题是由
类路径中的
httpcore
的冗余版本引起的,因此我移动到父目录,对名称中包含
httpcore
的所有文件进行递归搜索,但得到以下结果,似乎只显示了一个版本的
httpcore

[user@domain bin]$ cd /home/user/javacode/
[user@domain javacode]$ find . -name "*http*"
./dependencies/httpcore-4.1.2.jar
./dependencies/httpclient-4.2.3.jar
./dependencies/httpclient-4.2.3.jar.sha1
./dependencies/httpclient-4.2.3.pom
./dependencies/httpclient-4.2.3.pom.sha1
./dependencies/httpclient-4.1.2.jar
[user@domain javacode]$   
引发错误的代码行是:
TwilioRestClient客户端=新TwilioRestClient(帐户SID,身份验证令牌),小程序的完整代码为:

package mainpackage;

import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.MessageFactory;
import com.twilio.sdk.resource.instance.Message;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.List;

public class SendText {

  public static final String ACCOUNT_SID = "arealsid";
  public static final String AUTH_TOKEN = "arealtoken";

  public static void main(String[] args) throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
    String to = args[0];
    String body = args[1];
    // Build a filter for the MessageList
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("Body", body));
    params.add(new BasicNameValuePair("To", to));
    params.add(new BasicNameValuePair("From", "+11234567654"));

    MessageFactory messageFactory = client.getAccount().getMessageFactory();
    Message message = messageFactory.create(params);
    System.out.println(message.getSid());
      }
    }  
然后,我检查了上述依赖项的
ls-al
文件夹的内容是否有任何内容,但得到了以下结果,这似乎表明它们是空的:

[user@domain dependencies]$ cd /home/user/javacode/dependencies/1.2/
[user@domain 1.2]$ ls -al
total 12
drwxrwxr-x 2 user user    6 Aug 22 05:05 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 1.2]$ cd /home/user/javacode/dependencies/3.4.5/
[user@domain 3.4.5]$ ls -al
total 12
drwxr-xr-x 2 user user    6 Aug 22 03:00 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 3.4.5]$ cd /home/user/javacode/dependencies/4.2.3/
[user@domain 4.2.3]$ ls -al
total 12
drwxr-xr-x 2 user user    6 Aug 22 03:01 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 4.2.3]$ 
那么如何解决此错误并从命令行成功运行此程序?


回答:

解决方案是将终端导航到
dependencies
目录,然后在再次尝试从命令行运行java代码之前键入以下四个命令:

rm httpclient-4.2.3.pom
rm httpclient-4.2.3.pom.sha1
rm httpclient-4.2.3.jar
rm httpclient-4.2.3.jar.sha1

一位用户在下面的一般方向上暗示了一个猜测,因此我将其标记为已接受的答案。但实际的解决方案是四行rm命令,这消除了冗余的
httpclient
库。

如果在运行时出现
NoSuchFieldError
,最有可能的解释是,至少一个类在运行时呈现的版本与在编译时呈现的版本不同,并且您尝试使用的类引用了已更改类的编译时版本的字段,该字段不在同一类的运行时版本中

很难准确判断不兼容的地方,但我的第一个猜测是httpclient和httpcore的不兼容版本。请注意,尽管后者只有一个版本,但前者有两个版本。我认为,版本号完全匹配的httpclient和httpcore很可能是打算一起工作的

[user@domain dependencies]$ cd /home/user/javacode/dependencies/1.2/
[user@domain 1.2]$ ls -al
total 12
drwxrwxr-x 2 user user    6 Aug 22 05:05 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 1.2]$ cd /home/user/javacode/dependencies/3.4.5/
[user@domain 3.4.5]$ ls -al
total 12
drwxr-xr-x 2 user user    6 Aug 22 03:00 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 3.4.5]$ cd /home/user/javacode/dependencies/4.2.3/
[user@domain 4.2.3]$ ls -al
total 12
drwxr-xr-x 2 user user    6 Aug 22 03:01 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 4.2.3]$ 
rm httpclient-4.2.3.pom
rm httpclient-4.2.3.pom.sha1
rm httpclient-4.2.3.jar
rm httpclient-4.2.3.jar.sha1