Maven 辅助脚本 - 'Mavenize' a web project

admin 2017年7月9日13:51:18评论62 views字数 2195阅读7分19秒阅读模式

原创文章,本文与安全不直接相关。


我搜索了很长时间,没有找到直接的方法来解决下面描述到的问题,所以我写了这个脚本。如果你知道更好的方法,麻烦告诉我。:)


使用场景


当你拿到一套 WEB 程序的代码,出于方便的原因你想用 Maven 来构建它,但是程序本身不是基于 Maven 的,你需要做以下事情:


1. 添加 pom.xml,这一步在一般在 IDE 里面可以直接做到。

2. 在 pom.xml 中添加相关依赖。如果程序中有大量依赖的 jar 存在于 WEB-INF/lib 下,这就很麻烦了。你要把所有的 jar 转换为 dependency 并写入到 pom.xml 中,否则你将无法使用 maven 来编译这个工程。更麻烦的是这些 jar 并不一定在公有 Maven 仓库中存在。


所以我写了一个辅助小脚本来解决这个问题,代码在后面。


使用步骤


1. 将下面的 python 脚本保存到工程目录,文件名为 mavenlocal。

2. 在工程目录下创建 maven-local-repo

web-inf/lib 下的 jar(或者任何位于其它地方的依赖) 全都剪切到 maven-local-repo 目录下面。

3. 在工程目录运行 eval "$(mavenlocal ./local-maven-repo/ deploy)"

上面这条命令会将 local-maven-repo 目录下的所有 jar 安装到当前工程的本地仓库里面去。

4. 然后运行 mavenlocal ./local-maven-repo/ xml

将生成 xml 的配置,将这些配置添加到 pom.xml 里面就可以了。



代码如下,需要 Python3

#!/usr/bin/env python3
# author: n1nty
import os
import sys
import collections

repo = './local-maven-repo/'
Dependency = collections.namedtuple('Dependency', ['groupid', 'artifactid', 'version', 'file'])


def make_dependency(jar, dir):
f = jar[:-4]
try:
filename, version = f.rsplit('-', 1)
except:
filename, version = [f, '0.0']

return Dependency(groupid=filename, artifactid=filename, version=version, file=os.path.join(dir, jar))


def make_command(dependency):
return 'mvn deploy:deploy-file -DgroupId={groupid} -DartifactId={artifactid} -Dversion={version} -Durl=file:{repo} -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile={file}'.format(
groupid=dependency.groupid, artifactid=dependency.artifactid, version=dependency.version, repo=repo,
file=dependency.file)


def make_xml(dependency):
return '''<dependency>
  <groupId>{groupid}</groupId>
  <artifactId>{artifactid}</artifactId>
  <version>{version}</version>
</dependency>'''.format(groupid=dependency.groupid, artifactid=dependency.artifactid, version=dependency.version)


filename, dir, action = sys.argv
jars = [f for f in os.listdir(dir) if f.endswith('.jar')]

dependencies = [make_dependency(jar, dir) for jar in jars]

if action == 'deploy':
for dependency in dependencies:
print(make_command(dependency))
elif action == 'xml':
print('<dependencies>')
for dependency in dependencies:
print(make_xml(dependency))
print('</dependencies>')
print('''<repositories>
      <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
      </repository>
    </repositories>
''')


参考资料

http://stackoverflow.com/questions/4955635/how-to-add-local-jar-files-in-maven-project

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年7月9日13:51:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Maven 辅助脚本 - 'Mavenize' a web projecthttp://cn-sec.com/archives/277209.html

发表评论

匿名网友 填写信息