如何在GitHub上管理外部JS / CSS库

时间:2012-06-14 19:49:24

标签: java javascript maven repository project-management

对于使用 Maven Java 项目,我最近在我的GitHub上的存储库中添加了Twitters Bootstrap。现在我注意到我的GitHub语言统计信息已从

更改
  • 100%Java

  • 66,%Java 33,3%JavaScript

由于我没有编写JS部分,有没有办法管理这不算作我的,或者通常如何管理GitHub存储库中的外部JS代码或项目一般

5 个答案:

答案 0 :(得分:14)

我最近也遇到了问题。有几种方法可以解决它:

  • 使用性能优化版本,例如 bootstrap.min.js 而不是 bootstrap.js GitHub uses the file size来确定语言比例每个存储库。这不会减少到零,但至少会降低比例

  • 这可能是您想要的: GitHub有一个vendor list with regular expressions,它从语言图表中删除。在那里你会看到,jQuery已经成为排除的一部分。还有一个挂起的拉取请求来添加Twitter Bootstrap。如果没有通过,您可以随时将文件添加到名为供应商的目录中,并将其从统计信息中排除。

  • 使用Maven AntRun Plugin:有了它,您可以根据请求使用Ant Get

  • 下载JavaScript库文件
  • 还有这些JavaScript库的Maven存储库:Bootstrap-Maven。但是,文件安装在/ext/bootstrap/,我不知道这有何帮助

  • 还有更多解决方案,例如Maven War Plugin using overlays

最后我的建议:只需将文件放入存储库即可。我使用jQuery和Twitter Bootstrap在GitHub上查看了一些更大的项目,他们所有将他们的JavaScript库文件放入存储库。

这些JavaScript库文件的优点是它们不必像以前那样进行编译。利用这一优势,不要为了美观而增加额外的负担。最佳实践似乎是将其添加到存储库并使用愚蠢的语言图。谁知道,将来可能会忽略某些文件。

答案 1 :(得分:3)

两个观察结果:

  • GitHub统计信息不正确:您的项目包含大量的Java和JavaScript代码。说这是一个100%的Java项目是错误的。
  • 在您自己的代码存储库中包含依赖项并不常见。您可以手动或自动安装它们(使用因每种编程语言/环境而异的系统/方法)。例如,Python有一个名为requirements.txt的文件,列出了依赖关系,但在Java中,我可以想象有类似的方法。

答案 2 :(得分:3)

使用git子模块或将第三方文件放在名为“vendor”的目录中。那么Github将不会将它们视为代码的一部分

答案 3 :(得分:3)

问题相当陈旧,但为了将来参考,应该注意到GitHub在2014年添加了一个新的feature来处理这个问题。可能要感谢issue存储库中的开放linguist

此功能允许将某些文件视为库,文档或特定语言。

只需将.gitattributes文件添加到您的存储库即可。例如,要忽略库文件夹,只需添加以下行:

library/* linguist-vendored

或者要设置docs文件夹,请添加以下行:

docs/* linguist-documentation

可以找到更多示例here

答案 4 :(得分:1)

将项目拆分为多个子模块是Maven的最佳实践,每个子模块都有一个小的,明确定义的目的。如果您在同一个Maven模块中放置不同类型的源,则表示您没有正确使用它。假设最终你会得到.war,那么我的建议是添加Bootstrap,jQuery以及你正在使用的任何其他库作为将包含在war构建中的zip依赖项。

让我们假设您可以将这些库作为可下载的Maven依赖项提供(我将在下面讨论您完成此操作的选项),然后您只需将它们声明为您的war工件的依赖项:

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

就您自己的代码而言,这就是您需要“包含”的所有Bootstrap。

你如何获得拉链?好吧,最好的办法是将它发布在Maven中央存储库中,但这不是应该做的事情; Twitter应该加强并照顾那里的所有Maven用户。

接下来最好的办法是找到另一个已经包装良好的公共存储库,但是经过简短的谷歌搜索后我找不到一个包装好,也许你会有更幸运。

第三种选择是将事情掌握在自己手中,并为那个zip创建适当的Maven构建并将其发布到您自己的存储库中。

我更喜欢构建此类资源拉链的一个解决方案是使用maven程序集插件,您可以将其用作灵感this maven project:将源(js,css和图像文件)放在src/main/resources中,并添加一个simple assembly file,只将资源目录中的所有文件复制到一个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.twitter作为groupId是否安全,因为他们不是发布该工件的人,所以请使用您自己的groupId)

由于您自己的代码只声明了对此twitter-bootstrap工件的依赖性,因此您可以保持主GitHub存储库清除第三方代码。如果您不希望影响编码统计信息,则不必提交构建twitter-bootstrap工件的项目,尽管您编写的每一行代码都应该提交。

替代方案:maven-antrun-plugin

使用第三方库的mavenized包装的替代方法是使用maven-antrun-plugin中的ant任务从其官方zip发行版中提取这些文件,以下载zip并从中提取文件。

或者,您可以在twitter-bootstrap maven项目中使用此技巧,以避免复制其源文件。