原创文章,本文与安全不直接相关。
我搜索了很长时间,没有找到直接的方法来解决下面描述到的问题,所以我写了这个脚本。如果你知道更好的方法,麻烦告诉我。:)
使用场景
当你拿到一套 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
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论