6

「gradle build」を実行すると、プロジェクトの 1 つで次のエラーが発生しました。いくつかのクラスで次のコンパイル エラーが発生します。

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

とはいえ、このメソッドsetFirstResultlongas パラメータを取ります。コードは次のとおりです。

public void setFirstResult(long firstResult) {
    this._firstResult = firstResult;
}

--refresh-dependenciesキャッシュなどを試してみましたが、どれもうまくいきませんでした。さらに、このプロジェクトは 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;
    }
}
4

1 に答える 1

0

問題を発見し、解決することができました。setFirstResult(int firstResult)大多数のコメントは、使用しているクラスのバージョンが間違っていると指摘しました。それらは正しいです。

基本的にはGlobalMessageLogProvider変更されていますが、jar の最新バージョンは、Nexus サーバー (独自のプライベート サードパーティ依存サーバー) にプッシュされたことはありません。そのため、jar を引き下げるたびに、常に古いものを参照します。

最新のjarを手動でNexusサーバーにプッシュした後、エラーなしでgradleを使用してプロジェクトを正常にビルドできました。

したがって、この質問からのヒント: 最新バージョンの jar を自動的にビルドして Nexus サーバーにプッシュするビルド プロセスを作成する必要があります。カスタマイズされたコマンド/スクリプトを使用して、TeamCity ビルド サーバーを介してビルド/プッシュ プロセスを作成することを考えています。(より良い提案/実践のヒントがあれば、遠慮なく提供してください)。

親切に助けてくれてありがとう、心から感謝しています。

于 2015-07-21T15:17:34.853 に答える