簡體   English   中英

Gradle Compile & Execute the Single Java Class with third-party jar dependencies using Gradle `buildscript`

[英]Gradle Compile & Execute the Single Java Class with third-party jar dependencies using Gradle `buildscript`

我遵循了這個答案https://stackoverflow.com/a/19418847/1665592但它沒有幫助我使用 Z7B5CC4FB56E11DC7520F463 編譯單個 java 文件它說Task:compileMessageKeys NO-SOURCE為什么?

我只有一個 Java 文件CreateMessageKeysTask.java依賴於"apache-ant-1.7.0/ant.jar" Z68995FCBF432492D15484D04A9D2AC4

task compileMessageKeys (type: JavaCompile) {
    doFirst {
        println "$projectDir/precompile"
        new File("$projectDir/precompile").mkdirs()
    }
    source = sourceSets.main.java.srcDirs
    include 'mypackage.build.CreateMessageKeysTask.java'
    classpath = sourceSets.main.compileClasspath
    destinationDir = sourceSets.main.output.classesDir
}

compileMessageKeys.options.compilerArgs = ["-sourcepath", "builder/precompile-task/src/mypackage/build"]

我的ant腳本如下

  <target name="precompile"
          description="builds the CreateMessageKeysTask to generates the MessageKeys interface">
    <mkdir dir="${precompile}" />
    <echo message=" precompile.src: ${precompile.src}" />
    <javac srcdir="${precompile.src}" destdir="${precompile}"
           includes="mypackage/build/**"
           debug="true" fork="true" memoryMaximumSize="${javacCoreMaxMem}"
           includeantruntime="false">
      <classpath>
        <fileset dir="${my.proj.base}/lib/">
          <include name="apache-ant-1.7.0/ant.jar" />
        </fileset>
      </classpath>
    </javac>
  </target>

下面是我的 Java 文件中使用的 class import語句。

import org.apache.tools.ant.*

import java.io.*;
import java.util.*;

編輯

我也在下面嘗試了一些東西,但它仍然沒有幫助我

task compileMessageKeys (type: JavaCompile) {
    doFirst {
        println "$projectDir/precompile"
        new File("$projectDir/precompile").mkdirs()
    }
    dependencies{
        compile fileTree(dir: 'lib/', include: ['apache-ant-1.7.0/ant.jar'])
    }
    source = sourceSets.main.java.srcDirs
    include 'mypackage.build.CreateMessageKeysTask.java'
    classpath = sourceSets.main.compileClasspath
    destinationDir = sourceSets.main.output.classesDir
}

所以我嘗試創建一個單獨的源集,而不是配置編譯。這就是我所做的。

sourceSets {
    single{
        java {
            srcDir 'src/main/java'
            include '**/Class1.java'
        }
    }
}


task compileSingle(type: JavaCompile) {
    source = sourceSets.single.java
    classpath = sourceSets.main.compileClasspath
    destinationDirectory = sourceSets.main.output.classesDirs[0]
}

現在,當我調用compileSingle目標時,它只會編譯您在包含中添加的各個類。

這是我的 gradle 和目錄結構的屏幕截圖。 在此處輸入圖像描述 在這里你會看到我的 src 目錄中有兩個類,但是編譯后我在 output 中只有一個 class。

使用buildscriptGradle中編譯和執行 java 代碼非常簡單

buildscript {
    dependencies {
        classpath files('lib/apache-ant-1.7.0/ant.jar')
    }
}


task CreateMessageKeys {
    def obj = new mypackage.build.CreateMessageKeysTask();
    obj.execute();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM