Gradle 다 중 모듈 프로젝트 구축 방법 절차

7494 단어 Gradle다 중 모듈
보통 저 는 Maven 구축 프로젝트 를 사용 할 때 응용 프로젝트 를 여러 개의 더 작은 모듈 로 나 눕 니 다.
Gradle 프로젝트 도 하나의 구성 요소 보다 많 습 니 다.다 중 프로젝트 구축(multi-procject build)이 라 고도 부 릅 니 다.
우 리 는 먼저 여러 항목 의 구축 을 만 듭 니 다.

mkdir cmdGradleProj && cd cmdGradleProj
gradle init
이때
D:\cmdGradleProj>디 렉 터 리 에서 실행:tree /f의 항목 구 조 는 다음 과 같다.

│ build.gradle
│ gradlew
│ gradlew.bat
│ settings.gradle
│ 
├─.gradle
│ └─3.0
│   └─taskArtifacts
│       cache.properties
│       cache.properties.lock
│       fileHashes.bin
│       fileSnapshots.bin
│       fileSnapshotsToTreeSnapshotsIndex.bin
│       taskArtifacts.bin
│       
└─gradle
  └─wrapper
      gradle-wrapper.jar
      gradle-wrapper.properties

그리고 여러 모듈 을 만 듭 니 다.코어 와 웹 모듈 을 예 로 들 면 네 개의 디 렉 터 리 를 만 듭 니 다.(test 폴 더 는 테스트 클래스 를 만 드 는 데 사 용 됩 니 다.)

mkdir core\src\main\java
mkdir core\src\main\test
mkdir web\src\main\java
mkdir web\src\main\resources
 core 모듈:프로그램의 다른 모듈 에서 사용 할 수 있 는 일반적인 구성 요 소 를 포함 합 니 다.예 를 들 어 메시지 서비스 클래스 는'Hello World!'로 돌아 갑 니 다.문자열이 모듈 은 두 가지 의존 도가 있 습 니 다:Junit 4.11 과 comons-lang 3.
웹 모듈:모듈 은 HelloWorld 클래스 를 포함 하고 프로그램의 시작 입 니 다.MessageService 대상 에서 정 보 를 얻 고 받 은 정 보 를 로그 파일 에 기록 합 니 다.이 모듈 은 두 개의 의존 도 를 가지 고 있 습 니 다.core 모듈 이 필요 하고 Log4j 를 로그 로 사용 합 니 다.
현재 필요 한 디 렉 터 리 를 만 들 었 습 니 다.다음 단 계 는 Gradle 구축 을 설정 하 는 것 입 니 다.먼저 여러 프로젝트 구축 에 포 함 된 프로젝트 를 설정 합 니 다.
저 희 는 다음 절 차 를 통 해 여러 프로젝트 구축 에 포 함 된 프로젝트 를 설정 할 수 있 습 니 다.
1.루트 프로젝트 의 루트 디 렉 터 리 에 settings.gradle 파일 을 만 듭 니 다.여러 프로젝트 Gradle 구축 은 이 파일 을 포함 해 야 합 니 다.여러 프로젝트 구축 에 포 함 된 프로젝트 를 가리 키 기 때 문 입 니 다.
2.웹 과 core 프로젝트 가 우리 의 다 중 프로젝트 구축 에 포함 되 는 지 확인 합 니 다.
우리 의 settings.gradle 파일 은 다음 과 같 습 니 다.
include 'core'
include 'web'
약자:include'core','web'
루트 디 렉 터 리 의 build.gradle 수정:

//           
subprojects {
  apply plugin: 'java'
  // apply plugin: 'eclipse'
  apply plugin: 'idea'

  version = '1.0'

  // JVM      
  sourceCompatibility = 1.8
  targetCompatibility = 1.8

  // java                    
  [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'

  //     
  ext {
    springVersion = '4.3.3.RELEASE'
    hibernateVersion='5.2.2.Final'
  }

  repositories {
    mavenCentral()
  }

  jar {
    manifest {
      attributes("Implementation-Title": "Gradle")
    }
  }

  configurations {
    //             
    all*.exclude group: 'commons-httpclient'
    all*.exclude group: 'commons-logging'
    all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
  }

  dependencies {
    //     
    compile(
        "org.springframework:spring-context:$springVersion",
        "org.springframework:spring-orm:$springVersion",
        "org.springframework:spring-tx:$springVersion",
        "org.springframework.data:spring-data-jpa:1.10.3.RELEASE",
        "org.hibernate:hibernate-entitymanager:$hibernateVersion",
        "c3p0:c3p0:0.9.1.2",
        "mysql:mysql-connector-java:6.0.4",
        "org.slf4j:slf4j-nop:1.7.21",
        "commons-fileupload:commons-fileupload:1.3.2",
        "com.fasterxml.jackson.core:jackson-databind:2.8.2"
    )

    //   maven     jar
    ext.jarTree = fileTree(dir: 'libs', include: '**/*.jar')
    ext.rootProjectLibs = new File(rootProject.rootDir, 'libs').getAbsolutePath()
    ext.jarTree += fileTree(dir: rootProjectLibs, include: '**/*.jar')

    compile jarTree

    //     
    testCompile(
        "org.springframework:spring-test:$springVersion",
        "junit:junit:4.12"
    )
  }

  //             compile   jar.
  task listJars(description: 'Display all compile jars.') << {
    configurations.compile.each { File file -> println file.name }
  }
}
다음은 core/build.gradle 을 수정 하여 core 모듈 의 의존 도 를 정의 할 수 있 습 니 다.

// jar    
archivesBaseName = 'core'

//          ,             

web        core   ,    web/build.gradle   :

apply plugin:"war" 

dependencies{ 
  //    core   
  compile project(":core") 
  compile( 
      "org.springframework:spring-webmvc:$springVersion", 
      "org.apache.taglibs:taglibs-standard-impl:1.2.1" 
  ) 
  //       
  providedCompile( 
      "javax.servlet:javax.servlet-api:3.1.0", 
      "javax.servlet.jsp:jsp-api:2.2.1-b03", 
      "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1" 
  ) 
} 

task jarWithoutResources(type: Jar) { 
  baseName project.name 
  from("$buildDir/classes/main") 
} 

war{ 
  dependsOn jarWithoutResources 
  from("$projectDir/src/main/resources") { 
    include "*.properties" 
    into("WEB-INF/classes") 
  } 
  classpath=classpath - sourceSets.main.output 
  classpath fileTree(dir:libsDir, include:"${project.name}-${version}.jar") 
} 
task('jarPath')<<{ 
  configurations.runtime.resolve().each { 
    print it.toString()+";" 
  } 
  println(); 
} 
3.프로젝트 컴 파일
모든 jar 보기:

> gradle listJars
//          :
> gradle :core:dependencies
> gradle :web:dependencies

//      :
> gradle build

비교 해 보면 이때 의 목록 은 다음 과 같다.

│  build.gradle
│  gradlew
│  gradlew.bat
│  settings.gradle
│  
├───.gradle
│  └───3.0
│    └───taskArtifacts
│        cache.properties
│        cache.properties.lock
│        fileHashes.bin
│        fileSnapshots.bin
│        fileSnapshotsToTreeSnapshotsIndex.bin
│        taskArtifacts.bin
│        
├───core
│  │  build.gradle
│  │  
│  ├───build
│  │  ├───libs
│  │  │    core-1.0.jar
│  │  │    
│  │  └───tmp
│  │    └───jar
│  │        MANIFEST.MF
│  │        
│  └───src
│    ├───main
│    │  └───java
│    └───test
│      └───java
├───gradle
│  └───wrapper
│      gradle-wrapper.jar
│      gradle-wrapper.properties
│      
└───web
  │  build.gradle
  │  
  ├───build
  │  ├───libs
  │  │    web-1.0.jar
  │  │    web-1.0.war
  │  │    
  │  └───tmp
  │    ├───jarWithoutResources
  │    │    MANIFEST.MF
  │    │    
  │    └───war
  │        MANIFEST.MF
  │        
  └───src
    └───main
      ├───java
      └───resources
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기