2015-07-17 11 views
6

Durante l'esecuzione di "costruire Gradle" Ho ricevuto il seguente errore con uno dei nostri progetti, un paio di classi il seguente errore di compilazione:Gradle si lamenta che non può convertire a lungo per int anche quando il metodo prende come parametro di lungo

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 

Anche se il metodo setFirstResult accetta un parametro long. ecco il codice:

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

Ho provato --refresh-dependencies e sgomberato la cache ecc Nessuno di coloro che ha lavorato per me. Inoltre, questo progetto era un progetto di maven, l'ho convertito per usare invece gradle.

Edit:

Sto aggiungendo contesto aggiuntivo qui per la richiesta dai commenti:

Ecco il codice sorgente per il 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; 
    } 
} 

Qui è pieno di stack-trace

λ 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 

Modifica: ha aggiunto il codice sorgente di 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; 
    } 
} 
+0

Forse 'this._firstResult' è un' int'? –

+0

@JoopEggen Piuttosto sicuro è un 'lungo' ....' lungo privato _firstResult = 0L; ' –

+0

Puoi fornire un esempio semplificato che riproduca il problema? – Opal

risposta

0

ho scoperto il problema e sono stato in grado di farlo risolto. Il commento di maggioranza ha evidenziato che lo setFirstResult(int firstResult) è la versione sbagliata della classe utilizzata. sono corretti.

Bazzialmente, il GlobalMessageLogProvider è stato modificato, ma l'ultima versione di jar non è mai stata inviata al server Nexus sever (il nostro server di dipendenze di terze parti privato). così, ogni volta che tiro giù il barattolo, fa sempre riferimento a quello vecchio.

Dopo aver premuto manualmente l'ultimo jar sul server Nexus, sono riuscito a creare il progetto con gradle senza errori.

Quindi, portare via da questa domanda: Abbiamo bisogno di creare un processo di compilazione che creerà/sposterà automaticamente l'ultima versione di jar sul server Nexus. Sto pensando di creare il processo build/push attraverso il nostro server di build TeamCity con alcuni comandi/script personalizzati. (Non esitate a fornire suggerimenti di suggerimenti/pratiche migliori se ci sono).

Grazie a tutti per l'aiuto gentilezza, ho sinceramente apprezzato.

+0

Penso che dovresti esaminare la gestione della configurazione, che ti può assicurare che vengono utilizzate solo le versioni note per lavorare insieme. Sembra esserci anche qualche stranezza nello sviluppo dei componenti - come può essere che tu abbia la versione "lunga" di un jar localmente (quindi il tuo IDE non si lamenta del parametro sbagliato), ma Gradle tira il barattolo dal Nexus? Hai cambiato la fonte localmente e non ti sei impegnato? In questo caso, probabilmente non dovresti fare riferimento alla sorgente nel tuo progetto, ma solo alla libreria, al barattolo, contenente il metodo. In questo modo, il tuo IDE ti avrebbe avvertito. – stef77

+0

@ stef77 Sì, in realtà è una delle cose che non capisco. Sembra che il Gradle sia un comportamento strano. Fondamentalmente, ho notato, il gradle userà sempre il jar fuori dalla cartella ".m2". Se il barattolo non esiste, lo prenderà da Nexus. Sospetto che il motivo sia perché non tutti i progetti sono stati convertiti in gradle. (alcuni dei vecchi progetti utilizzano ancora Maven). così gradle non hanno idea di cosa fare in quel caso. Anche la modifica del tipo è avvenuta localmente, l'IDE (Eclipse) non si è lamentato di alcun errore di tipo. –