目标文件夹vs本地存储库

时间:2016-12-05 17:02:17

标签: maven

我知道Maven在本地存储库中存放了构建的结果(工件安装在~/.m2/repository/下),但它也在target文件夹中输出已编译的类src文件夹}。

本地存储库中的内容与target文件夹中的内容之间是否有任何区别?

2 个答案:

答案 0 :(得分:8)

它们是完全不同的,不应该混淆。

  • target表示构建目录。也就是说,从源代码构建期间生成的每个临时文件都会在那里结束。非常值得注意的是,您将找到主要和测试Java源代码的编译类,但you'll also find lots of things in there(生成的源文件,过滤文件等)。重要的是,此文件夹中包含的所有内容本质上都是暂时的。你可以随时删除它,运行mvn clean,并确保下一个版本(或者至少应该)正常工作。在target下生成的所有文件和文件夹都有一个目的:创建项目的工件。 Maven项目(例如包含jar)将具有单个主工件,该工件由its final namejar扩展组成,并将包含已编译的Java类。最终名称可以是在POM中设置的自定义名称,也可以是从项目的Maven coordinates派生的默认名称。此类项目还可以具有其他附加工件,例如测试JAR或源JAR。

  • 本地存储库仅包含工件。那里没有临时文件。运行mvn install时安装的内容严格来说是Maven项目的生成工件,即最终产品,加上项目的POM文件。用于创建它们的所有东西都不会放在本地存储库中,并且项目的构建绝不能将临时内容放在那里。请记住,本地存储库是Maven存储库,因此遵循严格的命名方案:组ID为my.groupid,工件ID为​​my-artifactid且版本为{的项目{1}}将安装在1.0文件夹中;您将在其中找到POM文件以及所有其他工件。工件本身的名称不能被覆盖:对于JAR项目(可能添加了a classifier),它将是my/groupid/my-artifactid/1.0

这通常是一个混乱的来源:在my-artifactid-1.0.jar文件夹下生成的主工件文件的名称与安装时在本地存储库中或在远程存储库中的名称完全不同部署时第一个可以控制,但后者由存储库的命名方案定义,该方案是根据坐标计算的。

总结一下:target包含构建过程中所有可靠的临时细节,这些细节会创建项目的工件(主JAR,源代码,Javadoc ......即应该由该项目部署和发布的所有内容) ),而本地存储库(和远程存储库)将仅包含工件本身。

答案 1 :(得分:1)

如果您真正关注的是module.jar生成的/target,那就不多了。生成的.jar是相同的,也考虑重新编译代码将清除您的.m2文件夹而不是/target文件夹。

虽然/target/classes文件夹通常由已编译的源类/target/generated-sourcemodule.jar等以及~.m2/repository组成。

另一方面,本地module.jar将包含pom.xml以及该模块的repositories和所有配置(dependenciesimport os import sys import email import imaplib from datetime import datetime from getpass import getpass detach_dir = 'C:\PyDir\\' u_line = '\n____________________________\n' def login_data(): mailboxes = ['@yandex.ru', "@gmail.com", "@mail.ru"] servers = ['yandex.ru', 'gmail.com', 'mail.ru'] srv = '' login = input("Enter your email: ") for lgt in range(len(mailboxes)): if mailboxes[lgt] in login: srv = servers[lgt] break return login, srv def address_parser(address): if "<" in address: return ''.join(address.split("<")[1:]).replace(">","") else: return address def subj_checker(subj): if None or "" in subj: return "<No theme>" else: return subj def mailbox_proc(mail): mail.select("INBOX") rv, mdata = mail.search(None, "ALL")#(None, "FROM", login) if rv != 'OK': print("No message found") return for i in mdata[0].split(): rv, mdata = mail.fetch(i, '(RFC822)') if rv != 'OK': print("Error fetching mail") return msg = email.message_from_bytes(mdata[0][1]) email_from = str(email.header.make_header( email.header.decode_header(msg['From']))) email_to = str(email.header.make_header( email.header.decode_header(msg['To']))) subj = str(email.header.make_header( email.header.decode_header(msg['Subject']))) date_tuple = email.utils.parsedate_tz(msg['Date']) if date_tuple: local_date = datetime.fromtimestamp(email.utils.mktime_tz(date_tuple)) local_message_date = "%s" % (str(local_date.strftime("%a, %d %b %Y %H:%M:%S"))) try: print('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s' % (address_parser(email_from), address_parser(email_to), local_message_date, subj, u_line)) except UnicodeEncodeError: print('From: %s\nTo: %s\nDate: %s\n<UNABLE TO ENCODE HEADER>\n%s' % (address_parser(email_from), address_parser(email_to), local_message_date, u_line)) for part in msg.walk(): outname = "email_" + i.decode("utf-8") if part.get_content_maintype() == "multipart": continue if part.get_content_type() == "text/plain" or "text/html": if part.get('Content-Disposition') is None: body = part.get_payload(decode=True) f = outname + '.txt' out = open(f, 'w') out.write('From: %s\nTo: %s\nDate: %s\nSubject: %s\n\nBody: \n\n%s' % (address_parser(email_from), address_parser(email_to), local_message_date, subj, body.decode('utf-8'))) out.close() if part.get('Content-Disposition') is not None: fname = part.get_filename() or part.get_param('filename') f = open(outname + '_' + fname, 'wb') f.write(part.get_payload(decode=True)) f.close() def main(): print("Enter email: " + login_data()[0]) M = imaplib.IMAP4_SSL('imap.' + login_data()[1], 993) try: rv, data = M.login(login_data()[0], getpass("Enter password: ")) except imaplib.IMAP4.error: print("\nimaplib.IMAP4.error: Authorization failed") sys.exit(1) print("\n") print(rv, data) if rv == 'OK': print("Processing mailbox...\n") mailbox_proc(M) M.close() else: print("Error: Cannot open mailbox ", rv) M.logout() try: main() except KeyboardInterrupt: quit() # finally: # input("Press any key.....") 等)如果需要,重建该模块。