2015-07-24 6 views
5

Attualmente sto lavorando alla conversione di uno dei nostri progetti Maven per utilizzare Gradle. Qui è il problema che sto attualmente di fronte:
Gradle con protezione SQL integrata

Questo progetto utilizza la protezione integrata di SQL . Ecco come Maven gestisce (questo ci ha portato un po 'per capirlo):

<dependency> 
     <groupId>com.microsoft.sqlserver</groupId> 
     <artifactId>sqljdbc4</artifactId> 
     <version>4.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/libs/sqljdbc4.jar</systemPath> 
    </dependency> 

dopo l'esecuzione gradle init --type pom questo specifico dependency è stato convertito in qualcosa di simile:

system group: 'com.microsoft.jdbcdriver', name: 'sqljdbc', version:'4.0.1' 

che non è giusto. Gradle non può costruire. Più specificamente, l'ambito system non esiste nemmeno nell'API di Gradle (né l'ho trovato in nessun plugin Gradle di terze parti).

Qualsiasi aiuto da parte di chi avesse esperienza con la sicurezza integrata di Gradle SQL sarebbe molto apprezzato.

risposta

2

È molto facile emulare l'ambito system con Gradle aggiungendo una configurazione.

Creare la configurazione system e impostarla come percorso di classe di compilazione. Eventuali dipendenze aggiunti system saranno ora disponibili durante la compilazione (anche se dubito avete bisogno di un driver JDBC specifica per la compilazione), ma le dipendenze in system non saranno aggiunti alle dipendenze pubblicati del modulo:

configurations { 
    system.extendsFrom compile 
} 

sourceSets { 
    main { 
     compileClasspath = configurations.system 
    } 
} 

Ora è possibile aggiungere facilmente il JAR del driver JDBC alla configurazione system. Questo presuppone che si vuole ancora fare riferimento a un file locale, proprio come con Maven:

dependencies { 
    system files('libs/sqljdbc-4.0.1.jar') 
} 

Ma se avete il vaso in un repository (locale), è meglio usare il repository:

dependencies { 
    system 'com.microsoft.jdbcdriver:sqljdbc:4.0.1' 
}