Gradle项目:复制依赖项以构建目录

时间:2018-04-19 15:49:42

标签: gradle

如何将项目的依赖项复制到构建目录?

这是一个非常常见的问题。我已经搜索过并发现许多线程可以回答这个问题,但没有一个解决方案正常运行。这里有三个线程(有些是很老的),它们提供了我无法工作的解决方案。

Gradle equivalent to Maven's "copy-dependencies"?

How to Copy dependencies to Build directory in Gradle

https://discuss.gradle.org/t/how-can-i-gather-all-my-projects-dependencies-into-a-folder/7146

仅供参考,我已尝试过,其中包括:

task copyDependencies(type: Copy) {
   from configurations.compile
   into 'dependencies'
}

task copyDependencies2(type: Copy) {
    from project.configurations.compile
    into project.buildDir
}

project.copy {
    from project.configurations.compile
    into project.buildDir
}

如果可能,我更喜欢当前推荐的最佳实践方法,而不是旧的弃用方法。我留在目前的Gradle,截至本文撰写时目前为4.7。

2 个答案:

答案 0 :(得分:0)

建议使用内置的“分发”插件。

<reactiveui:ReactiveUserControl
  x:Class="ReactiveDemo.NugetDetailsView"
  xmlns:reactiveDemo="clr-namespace:ReactiveDemo"
  x:TypeArguments="reactiveDemo:NugetDetailsViewModel"
  xmlns:reactiveui="http://reactiveui.net"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
      <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>
      <Image x:Name="iconImage" Margin="6" Width="64" Height="64"
             HorizontalAlignment="Center" VerticalAlignment="Center"/>
      <TextBlock Grid.Column="1" TextWrapping="WrapWithOverflow" 
                 Margin="6" VerticalAlignment="Center">
          <Run FontSize="14" FontWeight="SemiBold" x:Name="titleRun"/>
          <LineBreak />
          <Run FontSize="12" x:Name="descriptionRun"/>
          <LineBreak />
          <Hyperlink x:Name="openButton">Open</Hyperlink>
      </TextBlock>
  </Grid>
</reactiveui:ReactiveUserControl>

然后,您可以运行一个命令,该命令将在一个步骤中进行编译和组装:

plugins {
    id 'distribution'
}

group 'org.yourorg'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'log4j', name: 'log4j', version: '1.2.17'
}

distributions {
    main {
        contents {
            from jar // copies your jar
            from(project.configurations.runtime) // copies dependency jars
        }
    }
}

这会将分发创建为./build/install/
下的目录结构。 此外,您可以在./build/distributions /

下创建一个zip发行版。
gradlew installDist

如果要将构建的jar与依赖项分开,这是常规操作:

gradlew distZip

答案 1 :(得分:-1)

好的,玩了几个小时后,我有一个有效的解决方案。这与旧的解决方案截然不同,这些解决方案似乎不适用于当前版本的Gradle。这个适用于Gradle 4.7:

task jarWithDeps(dependsOn: 'jar', type: Copy) {
  def conf = configurations.runtimeClasspath
  from conf.allDependencies.collect { conf.files(it) }
  into "${project.buildDir}/libs"
}