当前位置: 首页 > 知识库问答 >
问题:

适用于 Java 项目的 Azure DevOps Pipeline,其中包含自承载代理

颛孙星海
2023-03-14

我们有一组使用不同JDK版本开发的Java项目,项目中使用了不同版本的Gradle和Maven。

我们应该使用Self Hosted Agent创建Azure运营模式管道,并且到目前为止,构建代理服务器已与JDK 11一起安装。

如何创建管道来处理此类项目?我们需要在Self-Hosted Agent中安装多个JDK版本还是其他更好的方法

共有2个答案

咸高谊
2023-03-14

另一个答案要求JDK二进制文件存在于某个位置。在没有它的情况下:

      - task: BASH@3
        displayName: 'install-java8'
        inputs:
          targetType: 'inline'
          script: |
            rm -rf /opt/jdk
            mkdir /opt/jdk
            wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz
            tar -zxf OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz -C /opt/jdk
            export PATH=$PWD/jdk8u322-b06/bin:$PATH
            update-alternatives --install /usr/bin/java java /opt/jdk/jdk8u322-b06/bin/java 100 && \
            update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk8u322-b06/bin/javac 100 && \
            update-alternatives --install /usr/bin/jar jar /opt/jdk/jdk8u322-b06/bin/jar 100 && \
            echo 'export JAVA_HOME=/opt/jdk/jdk8u322-b06/' >> /etc/profile.d/java.sh
            java -version                


      - task: BASH@3
        displayName: 'verify java8 installation'
        inputs:
          targetType: 'inline'
          script: |
            source /etc/profile.d/java.sh 
            java -version
            echo $JAVA_HOME
蔡楚
2023-03-14

是的,如果您想使用自托管代理,您需要安装多个JDK版本。更好的方法是使用微软托管的代理,因为它已经预装了一些版本的JDK。可以参考关于构建环境和使用多个版本构建的文档。

更新:

以下是我的Gradle与自托管代理的示例:

1.使用爪哇工具安装任务:

steps:
- task: JavaToolInstaller@0
  inputs:
    versionSpec: '11'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'LocalDirectory'
    jdkFile: 'C:\jdk-11.0.10.zip'
    cleanDestinationDirectory: false
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false
- task: JavaToolInstaller@0
  inputs:
    versionSpec: '8'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'LocalDirectory'
    jdkFile: 'C:\jdk1.8.0_281.zip'
    cleanDestinationDirectory: false
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

JDK 文件的 java 工具安装任务:

当jdkSourceOption==LocalDirectory时适用。指定包含压缩jdk的jdk归档文件的路径。路径可以在源存储库中,也可以在代理上的本地路径中。该文件应该是一个归档文件(.zip、.tar.gz、.7z),其中包含根级别或单个目录中的bin文件夹。

2.直接使用gradle任务:

steps:
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'Path'
    jdkDirectory: 'C:\Program Files\Java\jdk-11.0.10'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'Path'
    jdkDirectory: 'C:\Program Files\Java\jdk1.8.0_281'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false
 类似资料:
  • 问题内容: 我有一个ListView,其行中应具有以下布局: 应该是静态的,但每隔几秒钟就会更改一次。 我通过填充,将其传递给并在每次数据更改时进行设置来实现它: 我的问题是我不知道如何以上述格式显示数据。 提前致谢。 问题答案: 将此添加到你的布局文件夹 使你的主要xml布局如下 这是你的适配器 你的Java活动

  • 问题内容: 主要问题 我想做的很简单。否则,您会认为。但是,没有任何工作正常。 要求: 使用maven,使用AspectJ编译器编译Java 1.6项目。 注意: 我们的代码无法使用javac进行编译。也就是说,如果未编织方面,则编译将失败(因为我们拥有可以软化异常的方面)。 2011年 2月21日 更新: 对此有两种同等可行的解决方案(两种情况都将 AspectJ-maven-plugin 与

  • 问题内容: 如何对包含可选NSdate的可选数组进行排序? 如何根据dateCompleted对数组排序? 问题答案: 您的排序功能可以结合使用可选链接和nil合并运算符: 这将对值上的项目进行排序,所有和和一起的项目都被视为“在遥远的过去”,以便在所有其他项目之前对其进行排序。 Swift 3的 更新(假设是):

  • 问题内容: 我需要将父目录和其他子目录中的文件包含到子目录中。我之前只使用include(’/ rootdirectory / file.php’); 但现在看来似乎行不通。 只是想知道我该怎么做,谢谢。 这是我的确切行: 它给我这个错误(页面仍在运行): 警告: include(/forums/groups.php)[function.include]:无法打开流:C:\ xampp \ htd

  • 今天是我用React v17做的第一个项目(如果这很重要或不重要),我正在改变状态、dom等的东西,它不会像以前那样重新加载任何东西。通常情况下,当你有状态内的东西要保存时,你会注意到它,然后它就消失了,但是现在它不再发生了。 是否有什么我可以检查的,看看我是否做错了什么?只是一个用CreateReact应用程序创建的项目,clean。 这就是我所有的,https://github.com/Ste

  • 我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当