├── .gitignore ├── README.md ├── build.gradle └── src ├── api └── java │ └── doubler │ └── Doubler.java ├── impl └── java │ └── doubler │ └── impl │ └── DoublerImpl.java └── test └── java └── doubler └── impl └── DoublerImplTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | build/ 3 | *.class 4 | *.jar 5 | .settings/ 6 | .gradle/ 7 | .classpath 8 | .project 9 | 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gradle-multiple-jars 2 | 3 | Example Gradle project producing two jars from single source directory: 4 | - *API* from src/api 5 | - *Impl* from src/impl 6 | 7 | Both jars are installed to local maven reactor with: 8 | 9 | gradle install 10 | 11 | 12 | To add them to build.gradle use the following syntax: 13 | 14 | ```gradle 15 | compile 'com.github.jitpack.gradle-multiple-jars:api:1.0.1' 16 | compile 'com.github.jitpack.gradle-multiple-jars:impl:1.0.1' 17 | ``` 18 | 19 | Or to add them both together: 20 | 21 | ```gradle 22 | compile 'com.github.jitpack:gradle-multiple-jars:1.0.1' 23 | ``` 24 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "java" 2 | apply plugin: "maven" 3 | 4 | group = "com.github.jitpack" 5 | version = 1.0 6 | sourceCompatibility = 1.8 // java 8 7 | targetCompatibility = 1.8 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | sourceSets { 14 | api 15 | impl 16 | } 17 | 18 | sourceSets.all { set -> 19 | def jarTask = task("${set.name}Jar", type: Jar) { 20 | baseName = "$set.name" 21 | from set.output 22 | } 23 | 24 | artifacts { 25 | archives jarTask 26 | } 27 | } 28 | 29 | dependencies { 30 | apiCompile 'commons-codec:commons-codec:1.5' 31 | 32 | implCompile sourceSets.api.output 33 | implCompile 'commons-lang:commons-lang:2.6' 34 | 35 | testCompile 'junit:junit:4.9' 36 | testCompile sourceSets.api.output 37 | testCompile sourceSets.impl.output 38 | 39 | runtime configurations.apiRuntime 40 | runtime configurations.implRuntime 41 | } 42 | 43 | jar { 44 | from sourceSets.api.output 45 | from sourceSets.impl.output 46 | } 47 | 48 | // this step is necessary when installing both jars in the local maven repository 49 | install { 50 | repositories.mavenInstaller { 51 | addFilter('api') { artifact, file -> artifact.name.endsWith('api') } 52 | addFilter('impl') { artifact, file -> artifact.name.endsWith('impl') } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/api/java/doubler/Doubler.java: -------------------------------------------------------------------------------- 1 | package doubler; 2 | 3 | public interface Doubler { 4 | int doubleIt(int toDouble); 5 | } 6 | -------------------------------------------------------------------------------- /src/impl/java/doubler/impl/DoublerImpl.java: -------------------------------------------------------------------------------- 1 | package doubler.impl; 2 | 3 | import doubler.Doubler; 4 | 5 | public class DoublerImpl implements Doubler { 6 | public int doubleIt(int toDouble) { 7 | return toDouble * 2; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/java/doubler/impl/DoublerImplTest.java: -------------------------------------------------------------------------------- 1 | package doubler.impl; 2 | 3 | import doubler.Doubler; 4 | import org.junit.Test; 5 | 6 | public class DoublerImplTest { 7 | 8 | @Test 9 | public void testIt() { 10 | Doubler doubler = new DoublerImpl(); 11 | assert doubler.doubleIt(2) == 4; 12 | } 13 | } 14 | --------------------------------------------------------------------------------