我知道Maven在本地存储库中存放了构建的结果(工件安装在~/.m2/repository/
下),但它也在target
文件夹中输出已编译的类src
文件夹}。
本地存储库中的内容与target
文件夹中的内容之间是否有任何区别?
答案 0 :(得分:8)
它们是完全不同的,不应该混淆。
target
表示构建目录。也就是说,从源代码构建期间生成的每个临时文件都会在那里结束。非常值得注意的是,您将找到主要和测试Java源代码的编译类,但you'll also find lots of things in there(生成的源文件,过滤文件等)。重要的是,此文件夹中包含的所有内容本质上都是暂时的。你可以随时删除它,运行mvn clean
,并确保下一个版本(或者至少应该)正常工作。在target
下生成的所有文件和文件夹都有一个目的:创建项目的工件。 Maven项目(例如包含jar
)将具有单个主工件,该工件由its final name和jar
扩展组成,并将包含已编译的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-source
和module.jar
等以及~.m2/repository
组成。
另一方面,本地module.jar
将包含pom.xml
以及该模块的repositories
和所有配置(dependencies
,import 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.....")
等)如果需要,重建该模块。