对于我使用Maven的Java项目,我最近将 Twitters Bootstrap 添加到了我在 GitHub 上的存储库中。现在我注意到我的 GitHub 语言统计数据从
- 100% 爪哇
至
- 66,% Java 33,3% JavaScript
由于我没有编写 JS 部分,有没有一种方法可以管理这不被视为我的,或者通常如何管理 GitHub 存储库或项目中的外国 JS 代码
对于我使用Maven的Java项目,我最近将 Twitters Bootstrap 添加到了我在 GitHub 上的存储库中。现在我注意到我的 GitHub 语言统计数据从
至
由于我没有编写 JS 部分,有没有一种方法可以管理这不被视为我的,或者通常如何管理 GitHub 存储库或项目中的外国 JS 代码
我最近也遇到了这个问题。有几种方法可以处理它:
使用性能优化的版本,例如bootstrap.min.js而不是bootstrap.js等。GitHub 使用文件大小来确定每个存储库的语言比例。这不会将其降低到零,但至少会降低比例
这可能是您想要的: GitHub 有一个供应商列表,其中包含从语言图中排除的正则表达式。在那里你会看到,jQuery 已经是排除的一部分。还有一个待处理的拉取请求以添加 Twitter Bootstrap。如果这没有通过,您可以随时将文件添加到名为vendor的目录中,它们将从统计信息中排除。
使用Maven AntRun 插件:使用它,您可以简单地使用Ant Get下载 JavaScript 库文件
这些 JavaScript 库也有 Maven 存储库:Bootstrap-Maven。但是,文件安装在/ext/bootstrap/
,我不知道这有什么帮助
还有更多的解决方案,比如Maven War Plugin using overlays。
最后我的建议:只需将文件放入您的存储库。我在 GitHub 上使用 jQuery 和 Twitter Bootstrap 研究了一些更大的项目,它们都将 JavaScript 库文件放入存储库。
这些 JavaScript 库文件的优点是它们不必像以往那样编译。利用这一优势,不要为了美观而增加额外的负担。最佳实践似乎是将其添加到存储库并使用愚蠢的语言图。谁知道呢,也许将来某些文件会被忽略。
两个观察:
使用 git 子模块或将您的第 3 方文件放在名为“供应商”的目录中。那么 Github 不会将它们算作你的代码的一部分
将项目拆分为多个子模块是 Maven 的最佳实践,每个子模块都有一个小的、明确定义的用途。如果您将不同类型的源代码放在同一个 Maven 模块中,那么您就没有正确使用它。假设最终你会得到一个 .war,那么我的建议是添加 Bootstrap、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>
就您自己的代码而言,这就是您需要“包含”的所有引导程序。
你如何获得可用的拉链?好吧,最好的办法是看到它在中央 Maven 存储库上发布,但这不是您应该做的事情;Twitter 应该加强并照顾所有 Maven 用户。
下一个最好的办法是找到另一个已经打包好的公共存储库,但是在短暂的谷歌搜索之后我找不到一个打包好的,也许你会有更多的运气。
第三种选择是将事情掌握在自己手中,并为该 zip 创建适当的 Maven 构建并将其发布到您自己的存储库中。
我更喜欢构建此类资源 zip 的一种解决方案是使用 maven 程序集插件,您可以使用这个 maven 项目作为灵感:将源(js、css 和图像文件)放入src/main/resources
,并添加一个简单的程序集文件,它只是复制将资源目录中的所有文件压缩成一个 zip。在服务器上设置一个 maven 存储库(具有 sftp 访问权限的简单 HTTP 服务机器就足够了),并在该项目上进行 maven 发布以将工件上传到服务器上。
(无论如何,您应该有一个 Maven 存储库来发布您自己的项目)
接下来,您需要在真实项目的 pom 文件中声明您的存储库,添加对 bootstrap 工件的依赖项,并配置 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 工件的项目,尽管您编写的每一行代码都应该提交。
使用 mavenized 第三方库打包的替代方法是使用maven-antrun-plugin中的 ant 任务从其官方 zip 发行版中提取这些文件,以下载 zip 并从中提取文件。
或者,您可以在 twitter-bootstrap maven 项目中使用此技巧,以避免复制其源文件。