Gradle 抱怨它无法将 long 转换为 int,即使该方法需要 long 作为参数
Gradle complains it can't convert long to int even while the method takes long as parameter
当 运行 "gradle build" 我的一个项目出现以下错误时,类 中的几个出现以下编译错误:
cannot be applied to given types;
this._logFilter.setFirstResult(firstResult);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
尽管如此,方法 setFirstResult
将 long
作为参数。
这是代码:
public void setFirstResult(long firstResult) {
this._firstResult = firstResult;
}
我已经尝试 --refresh-dependencies
并清除了缓存等。None 对我有用。另外,这个项目是一个maven项目,我把它转过来用gradle代替。
编辑:
我根据评论的要求在此处添加额外的上下文:
这是 this._logFilter
的源代码
public class GlobalMessageLogFilter {
private long _firstResult = 0L;
private long _maxResults = 100L;
private Application _application;
private SeverityLevelEnum _severityLevel;
private EnvironmentEnum _environment;
private String _userName;
private Category _category;
public EnvironmentEnum getEnvironment() {
return this._environment;
}
public void setEnvironment(EnvironmentEnum environment) {
this._environment = environment;
}
public long getFirstResult() {
return this._firstResult;
}
public void setFirstResult(long firstResult) {
this._firstResult = firstResult;
}
public long getMaxResults() {
return this._maxResults;
}
public void setMaxResults(long maxResults) {
this._maxResults = maxResults;
}
public Application getApplication() {
return this._application;
}
public void setApplication(Application application) {
this._application = application;
}
public SeverityLevelEnum getSeverityLevel() {
return this._severityLevel;
}
public void setSeverityLevel(SeverityLevelEnum severityLevel) {
this._severityLevel = severityLevel;
}
public String getUserName() {
return this._userName;
}
public void setUserName(String userName) {
this._userName = userName;
}
public Category getCategory() {
return this._category;
}
public void setCategory(Category category) {
this._category = category;
}
}
这是完整的堆栈跟踪
λ gradle build
:compileJava
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:36: error: method setFirstResult in class GlobalMessageLogFilter cannot be applied to given types;
this._logFilter.setFirstResult(firstResult);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:37: error: method setMaxResults in class GlobalMessageLogFilter cannot be applied to given types;
this._logFilter.setMaxResults(maxResults);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:35: error: method setFirst in class UserSearchFilter cannot be applied to given types;
this._filter.setFirst(first);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:36: error: method setCount in class UserSearchFilter cannot be applied to given types;
this._filter.setCount(count);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
编辑:
添加了 GlobalMessageLogProvider
的源代码
public class GlobalMessageLogProvider extends SortableDataProvider<GlobalMessageLog, String>
{
@SpringBean
private GlobalMessageLogRepository _globalMessageLogRepository;
private GlobalMessageLogFilter _logFilter;
private boolean _searchAllowed = false;
public GlobalMessageLogProvider(GlobalMessageLogFilter globalMessageLogFilter)
{
Injector.get().inject(this);
this._logFilter = globalMessageLogFilter;
}
@Override
public Iterator<? extends GlobalMessageLog> iterator(long firstResult, long maxResults)
{
this._logFilter.setFirstResult(firstResult);
this._logFilter.setMaxResults(maxResults);
Iterator<GlobalMessageLog> results = Arrays.<GlobalMessageLog> asList().iterator();
if (this._searchAllowed)
{
if (super.getSort() == null)
{
results = this._globalMessageLogRepository.search(this._logFilter, "id", false).iterator();
} else
{
results =
this._globalMessageLogRepository.search(this._logFilter,
super.getSort().getProperty(),
super.getSort().isAscending()).iterator();
}
}
return results;
}
}
我发现了问题并且能够解决它。
大多数评论指出 setFirstResult(int firstResult)
是它一直使用的 class 的错误版本。他们是正确的。
基本上,GlobalMessageLogProvider
改了,但是最新版本的jar一直没有推送到Nexus服务器(我们自己的私有第三方依赖服务器)。所以,每当我把罐子拉下来的时候,它总是参考旧的。
手动将最新的 jar 推送到 Nexus 服务器后,我能够使用 gradle 成功构建项目,没有错误。
所以从这个问题中得出结论:
我们需要创建一个构建过程,自动将 build/push 最新版本的 jar 发送到 Nexus 服务器。我正在考虑通过我们的 TeamCity 构建服务器使用一些自定义 command/script 创建 build/push 流程。 (如果有更好的 suggestion/practice 提示,请随时提供)。
感谢大家的热心帮助,由衷感谢
当 运行 "gradle build" 我的一个项目出现以下错误时,类 中的几个出现以下编译错误:
cannot be applied to given types;
this._logFilter.setFirstResult(firstResult);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
尽管如此,方法 setFirstResult
将 long
作为参数。
这是代码:
public void setFirstResult(long firstResult) {
this._firstResult = firstResult;
}
我已经尝试 --refresh-dependencies
并清除了缓存等。None 对我有用。另外,这个项目是一个maven项目,我把它转过来用gradle代替。
编辑:
我根据评论的要求在此处添加额外的上下文:
这是 this._logFilter
public class GlobalMessageLogFilter {
private long _firstResult = 0L;
private long _maxResults = 100L;
private Application _application;
private SeverityLevelEnum _severityLevel;
private EnvironmentEnum _environment;
private String _userName;
private Category _category;
public EnvironmentEnum getEnvironment() {
return this._environment;
}
public void setEnvironment(EnvironmentEnum environment) {
this._environment = environment;
}
public long getFirstResult() {
return this._firstResult;
}
public void setFirstResult(long firstResult) {
this._firstResult = firstResult;
}
public long getMaxResults() {
return this._maxResults;
}
public void setMaxResults(long maxResults) {
this._maxResults = maxResults;
}
public Application getApplication() {
return this._application;
}
public void setApplication(Application application) {
this._application = application;
}
public SeverityLevelEnum getSeverityLevel() {
return this._severityLevel;
}
public void setSeverityLevel(SeverityLevelEnum severityLevel) {
this._severityLevel = severityLevel;
}
public String getUserName() {
return this._userName;
}
public void setUserName(String userName) {
this._userName = userName;
}
public Category getCategory() {
return this._category;
}
public void setCategory(Category category) {
this._category = category;
}
}
这是完整的堆栈跟踪
λ gradle build
:compileJava
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:36: error: method setFirstResult in class GlobalMessageLogFilter cannot be applied to given types;
this._logFilter.setFirstResult(firstResult);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:37: error: method setMaxResults in class GlobalMessageLogFilter cannot be applied to given types;
this._logFilter.setMaxResults(maxResults);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:35: error: method setFirst in class UserSearchFilter cannot be applied to given types;
this._filter.setFirst(first);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:36: error: method setCount in class UserSearchFilter cannot be applied to given types;
this._filter.setCount(count);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
编辑:
添加了 GlobalMessageLogProvider
public class GlobalMessageLogProvider extends SortableDataProvider<GlobalMessageLog, String>
{
@SpringBean
private GlobalMessageLogRepository _globalMessageLogRepository;
private GlobalMessageLogFilter _logFilter;
private boolean _searchAllowed = false;
public GlobalMessageLogProvider(GlobalMessageLogFilter globalMessageLogFilter)
{
Injector.get().inject(this);
this._logFilter = globalMessageLogFilter;
}
@Override
public Iterator<? extends GlobalMessageLog> iterator(long firstResult, long maxResults)
{
this._logFilter.setFirstResult(firstResult);
this._logFilter.setMaxResults(maxResults);
Iterator<GlobalMessageLog> results = Arrays.<GlobalMessageLog> asList().iterator();
if (this._searchAllowed)
{
if (super.getSort() == null)
{
results = this._globalMessageLogRepository.search(this._logFilter, "id", false).iterator();
} else
{
results =
this._globalMessageLogRepository.search(this._logFilter,
super.getSort().getProperty(),
super.getSort().isAscending()).iterator();
}
}
return results;
}
}
我发现了问题并且能够解决它。
大多数评论指出 setFirstResult(int firstResult)
是它一直使用的 class 的错误版本。他们是正确的。
基本上,GlobalMessageLogProvider
改了,但是最新版本的jar一直没有推送到Nexus服务器(我们自己的私有第三方依赖服务器)。所以,每当我把罐子拉下来的时候,它总是参考旧的。
手动将最新的 jar 推送到 Nexus 服务器后,我能够使用 gradle 成功构建项目,没有错误。
所以从这个问题中得出结论: 我们需要创建一个构建过程,自动将 build/push 最新版本的 jar 发送到 Nexus 服务器。我正在考虑通过我们的 TeamCity 构建服务器使用一些自定义 command/script 创建 build/push 流程。 (如果有更好的 suggestion/practice 提示,请随时提供)。
感谢大家的热心帮助,由衷感谢