15

Mavenを使用するJavaプロジェクトでは、最近GitHubのリポジトリにTwitterBootstrapを追加しました。GitHubの言語統計がから変更されていることに気づきました

  • 100%Java

  • 66、%Java 33,3%JavaScript

私はJSの部分を書いていなかったので、これが私のものとしてカウントされないように管理する方法はありますか、またはGitHubリポジトリやプロジェクト一般で外部のJSコードを通常どのように管理するのでしょうか?

4

5 に答える 5

17

私も最近その問題に直面しています。これに対処する方法はいくつかあります。

  • パフォーマンスが最適化されたバージョンを使用します。たとえば、 bootstrap.jsなどの代わりにbootstrap.min.jsを使用します。GitHubはファイルサイズを使用して、各リポジトリの言語比率を決定します。これはゼロに減少しませんが、少なくとも比率を減少させます

  • これはあなたが望むものかもしれません: GitHubには、言語グラフから除外された正規表現を含むベンダーリストがあります。ここで、jQueryがすでに除外の一部になっていることがわかります。TwitterBootstrapを追加するための保留中のプルリクエストもあります。これが合格しない場合は、いつでもベンダーと呼ばれるディレクトリにファイルを追加でき、そこで統計から除外されます。

  • Maven AntRunプラグインを使用する:これを使用すると、 AntGetを使用してリクエストに応じてJavaScriptライブラリファイルを簡単にダウンロードできます。

  • これらのJavaScriptライブラリ用のMavenリポジトリもあります:Bootstrap-Maven。ただし、ファイルはにマウントされて/ext/bootstrap/おり、これがどのように役立つかわかりません

  • オーバーレイを使用するMavenWarPluginなど、さらに多くのソリューションがあります。

最後に私のアドバイス:ファイルをリポジトリに入れるだけです。jQueryとTwitterBootstrapを使用してGitHubでいくつかの大きなプロジェクトを調べましたが、それらはすべてJavaScriptライブラリファイルをリポジトリに配置しています。

これらのJavaScriptライブラリファイルの利点は、コンパイルする必要がないことです。この利点を利用し、美的目的のために追加の負担を加えないでください。ベストプラクティスは、それをリポジトリに追加し、愚かな言語グラフを使用することです。誰が知っている、多分特定のファイルは将来無視されるでしょう。

于 2012-06-29T20:28:51.650 に答える
4

The question is fairly old, but for future reference, it should be noted that GitHub added in 2014 a new feature to handle this thing. Possibly thanks to an open issue on the linguist repository.

This feature allows regarding certain files as libraries, documentation or a specific language.

Just add .gitattributes file to your repository. For example, to ignore a library folder, just add the line:

library/* linguist-vendored

Or to set the docs folder, add the line:

docs/* linguist-documentation

More examples can be found here.

于 2017-06-01T07:19:18.303 に答える
3

2つの観察:

  • GitHubの統計は正しくありません。プロジェクトは、これらの量のJavaおよびJavaScriptコードで構成されています。100%Javaプロジェクトであると言うのは誤りです。
  • 独自のコードリポジトリに依存関係を含めることは一般的ではありません。それらを手動または自動でインストールします(プログラミング言語/環境ごとに異なるシステム/メソッドを使用)。たとえば、Pythonには依存関係をリストするrequirements.txtというファイルがありますが、Javaでは同様のアプローチがあると想像できます。
于 2012-06-14T19:54:55.457 に答える
3

gitサブモジュールを使用するか、サードパーティのファイルを「vendor」というディレクトリに配置します。その場合、Githubはそれらをコードの一部としてカウントしません

于 2012-06-30T13:08:49.723 に答える
1

プロジェクトをいくつかのサブモジュールに分割することはMavenのベストプラクティスであり、各サブモジュールには小さく明確な目的があります。同じMavenモジュールにさまざまな種類のソースを配置している場合、それを正しく使用していません。最終的に.warになると仮定すると、私のアドバイスは、ブートストラップ、jQuery、およびwarビルドに含まれるzip依存関係として使用している他のライブラリを追加することです。

これらのライブラリをダウンロード可能なMaven依存関係として利用できると仮定しましょう(これを実現するためのオプションについては以下で説明します)。その後、戦争アーティファクトの依存関係として宣言する必要があります。

  <dependency>
    <groupId>com.twitter.bootstrap</groupId>
    <artifactId>twitter-bootstrap</artifactId>
    <version>2.0.4</version>
    <type>zip</type>
    <scope>runtime</scope>
  </dependency>

独自のコードに関する限り、これが「含める」必要のあるすべてのブートストラップです。

そのzipをどのように利用できるようにしますか?まあ、最良のことはそれが中央のMavenリポジトリーに公開されているのを見ることですが、それはあなたがすべきことではありません。Twitterはステップアップして、そこにいるすべてのMavenユーザーの世話をする必要があります。

次善の策は、すでに適切にパッケージ化された別の公開リポジトリを見つけることですが、Googleで簡単に検索した後、適切なパッケージのリポジトリを見つけることができませんでした。

3番目のオプションは、物事を自分の手に取り、そのzip用の適切なMavenビルドを作成し、それを自分のリポジトリーに公開することです。

このようなリソースzipを作成するために私が好む解決策の1つは、Mavenアセンブリプラグインを使用することです。このMavenプロジェクトをインスピレーションとして使用できます。ソース(js、css、およびイメージファイル)をに入れ、コピーするだけの単純なアセンブリファイルsrc/main/resourcesを追加します。リソースディレクトリからzipへのすべてのファイル。サーバー上にMavenリポジトリーをセットアップし(sftpアクセスを備えた単純なHTTPサービングマシンで十分です)、そのプロジェクトでMavenリリースを実行して、サーバーにアーティファクトをアップロードします。

(とにかく自分のプロジェクトをリリースするためのMavenリポジトリが必要です)

次に、実際のプロジェクトのpomファイルでリポジトリを宣言し、ブートストラップアーティファクトへの依存関係を追加し、選択した場所で解凍するようにmaven-dependency-pluginを構成する必要があります。

...
  <repositories><repository>
    <id>bootstrap-repo</id>
    <name>bootstrap public repository</name>
    <url>http://repo.yourhost.net/release</url>
    <releases>
      <enabled>true</enabled>
    </releases>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository></repositories>
...
  <dependencies><dependency>
    <groupId>com.twitter.bootstrap</groupId>
    <artifactId>twitter-bootstrap</artifactId>
    <version>2.0.4</version>
    <type>zip</type>
    <scope>runtime</scope>
  </dependency></dependencies>
...
  <build><plugins><plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <!-- Unpack the Bootstrap library -->
            <artifactItem>
              <groupId>com.twitter</groupId>
              <artifactId>twitter-bootstrap</artifactId>
              <type>zip</type>
              <outputDirectory>${project.build.directory}/bootstrap</outputDirectory>
            </artifactItem>
          </artifactItems>
        </configuration>
      </execution>
    </executions>
  </plugin></plugins></build>
...

com.twittergroupIdとして使用しても安全かどうかはわかりません。これらはそのアーティファクトを公開しているものではないため、独自のgroupIdを使用してください)

独自のコードはこのtwitter-bootstrapアーティファクトへの依存を宣言しているだけなので、メインのGitHubリポジトリからサードパーティのコードをクリーンに保つことができます。コーディング統計に影響を与えたくない場合は、twitter-bootstrapアーティファクトを構築するプロジェクトをコミットする必要はありませんが、作成するコードのすべての行をコミットする必要があります。

代替:maven-antrun-plugin

サードパーティライブラリのMaven化パッケージを使用する代わりに、maven-antrun-pluginのantタスクを使用して公式のzipディストリビューションからこれらのファイルを抽出し、zipをダウンロードしてそこからファイルを抽出することもできます。

または、ソースファイルのコピーをまったく回避するために、twitter-bootstrapmavenプロジェクトでこのトリックを使用できます。

于 2012-07-02T04:32:41.627 に答える