2016-08-16 25 views
0

私の会社は私に解決すべき面白い問題を与えてくれました。私たちは内部のArtifactoryサーバを持っています。理由のため、そのサーバーはインターネットにはまったく存在しませんが、すべてが構成されると、会社内のすべての製品のすべての依存関係管理が提供されます。ライブラリがOUR artifactory serverにない場合は、ビルドとMavenの中心を爆破し、典型的なユーザーのためにすべてのミラーがファイアウォールでブロックされます。 OK? OK。推移的な依存関係を別々に管理する

したがって、承認されたライブラリとそのトランジェントは、Maven CentralからArtifactory Serverに移行することになります。私たちのサーバーはインターネット上になくて決してないので、マネージャーのワークステーションで行う必要があります。

理由から、プライマリライブラリとその依存関係を分離する必要があります。 artifactory以内に、我々は2つのリポジトリを持っているので、それは次のようになります。

third-party <- approved libraries 
transients <- transient dependencies of approved libraries 

だから、かなりのpythonで最初からこれを実行しようとするよりも、私はGradleのでこれをやってのけることができるように願っています。ここに私がしたいことがあります。

タスク1.ライブラリが承認されると、マネージャは特殊なgradleビルドファイルに進みます。彼らは、他のJavaアプリケーションと異なり、依存関係としてライブラリの典型的な情報を入力します(複数入力することもできますが、入力したように進んでいます)。彼らはタスクを実行します。タスクは、ビルドの下に2つのフォルダを作成します。 Build/thirdparty,build/transient。これは、入力したファイルをthirdpartyフォルダに直接送ります。これは、完全なダウンロード、lib、ソース、jar、pom everythingとなります。基本的には、Mavenリポジトリのクローンです。次に、一時的な依存関係のいずれかに対して、一時的なフォルダー内で同じことを行います。

タスク2:ユーザーがプライベートネットワークに戻ったら(ほとんどの場合、通りを歩くことになります)、2番目のタスクを発行します。そのタスクはbuild/thirdpartyのすべてをとり、artifactory.com/thridpartyリポジトリにインストールします。次に、一時フォルダからすべてを取り出し、artifactory.com/transientリポジトリにインストールします。

キーがファイルをダウンロードしています。私は言うことができるgradleの方法は、このフォルダとそのフォルダ内のトランジェントに直接扶養家族を入れているのですか?私は、レポートプラグインをハックし、探しているものをイムにその変換しない限り、

--edit

ImはGradleの3.0のソースを読んで、私は運のうち、イムと思うが、私はここで沈没の感覚を得ます。

シンプルなのはいかがですか。 libsをフォルダに入れるためにgradleを取得することは、ケーキです。 Mavenの中央POMファイルをフォルダに入れるにはどうすればいいですか?私がgradle prime-cacheを行うことができるタスクを作成して、それが依存関係のjar、pom、src、およびjavadocsをプルダウンして、それらを私の選択したフォルダにプルした場合、私はPythonで残りの作業を行うことができます。

+0

*推移的な依存関係を意味すると思われますか? –

+0

いや、長い日。 DependencyResolutionListenerは、直接依存性と推移依存性を区別しないようです。この作業を行う唯一の方法は、transitive = falseを設定したbuild.gradleを生成し、サードパーティのフォルダに入れ、transitive = trueの別のgenを作成するpythonスクリプトを作成し、それを私の推移性にコピーし、そこから直接の依存関係を削除してください。 – scphantm

答えて

1

これは優雅ではありませんが、役立つ可能性があります。私たちは春のコア、Springコンテキスト、および春のJDBCを使用する単純なクラスがあるとします。

package net.codetojoy.service; 

import org.springframework.context.*; 
import org.springframework.jdbc.core.JdbcTemplate; 

public class UserService implements ApplicationContextAware { 
    private JdbcTemplate jdbcTemplate; 

    public void setApplicationContext(ApplicationContext applicationContext) { 
    } 
} 

その後、我々は「直接依存」のjarファイルを追跡する場合、我々はjarファイルのすべてを反復処理するためにconfigurations.compileを使用してソートすることができますそれを出す。

apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 

def buildMap(g, n, v) { 
    return [group: g, name: n, version: v] 
} 

def SPRING_CORE = buildMap 'org.springframework','spring-core','4.3.2.RELEASE' 
def SPRING_CONTEXT = buildMap 'org.springframework','spring-context','4.3.2.RELE 
ASE' 
def SPRING_JDBC = buildMap 'org.springframework','spring-jdbc','4.3.2.RELEASE' 

def directDependencies = [] 
directDependencies << SPRING_CORE 
directDependencies << SPRING_CONTEXT 
directDependencies << SPRING_JDBC 

dependencies { 
    compile SPRING_CORE 
    compile SPRING_CONTEXT 
    compile SPRING_JDBC 

    testCompile group: 'junit', name: 'junit', version: '4.12' 
} 

def isInDirectDependencies = { jar -> 
    def result = false 

    directDependencies.each { d -> 
     def regex = ".*${d.group}.*${d.name}.*${d.version}.*" 
     if (jar.absolutePath ==~ regex) { 
      result = true 
     } 
    } 

    return result 
} 

task myTask << { 
    configurations.compile.each { jar -> 
     def isTransitive = ! isInDirectDependencies(jar) 
     println "${jar.name} , isTransitive: ${isTransitive}" 
    } 
} 

代替gradle dependencesの出力を解析することであるが、上記のアプローチの利点は、1つのjarファイルのフルパスへのアクセスを有することである。myTask以下を参照されたいです。

+0

私は同様のことをやろうとしましたが、問題は私が依存関係ブロックに入力されたものを読めるようにするAPIや技術を見つけることができなかったことです。私は地図や他のオブジェクトの種類の代わりに奇妙なものを取得し続けた。私はソースを検索して、どのようにまとめられているか見てみましたが、見つけられませんでした。 – scphantm

関連する問題