JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java Tools  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
話題被移動
該話題已被移動 - koji , 2006-08-30 09:47
如果您尚不清楚該話題被移動的原因,請參考論壇規則以及本版公告或者聯系本版版主。
本主題所含的標籤
無標籤
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-30 12:13 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我想你大概是用 mvn validate 吧?
确实如此。

你留意一下 proficio-store-memory 中的 "成功" 訊息是什麼?
"No goals needed for project - skipping"
我想大概是因為單是validate 的話 POM 中沒有動作要做, 所以它直接 skip 掉了. 你試試換成 mvn compile 吧. 你就會知道我所說的是什麼意思了
我想应该不是您说的这个原因。您可以用我前述的example试一试。
目录example目录B中分别执行mvn compile,都可以成功;但在目录A中执行mvn compile,是不能成功。这个操作,我之前就做过了;而且我在实际项目中也是如此使用的,结果也相同。


jiangshachina edited on 2006-08-30 12:21
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-30 12:18 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
现在的关键问题在于:为什么第三层的pom可以通过验证;而第二层的pom不能通过验证?
B继承A,B是A的一个子模块;A继承example,A是example的一个子模块。
使用B的pom时,不寻找A中的pom或example中的pom;而使用A的pom时,确要寻找example中的pom?!
我的疑惑就是:看似相同结构的两个pom(A、B中的pom),但使用时却有如此大的差距!


jiangshachina edited on 2006-08-30 12:23
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-08-30 15:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
确实如此。

我想应该不是您说的这个原因。您可以用我前述的example试一试。
目录example目录B中分别执行mvn compile,都可以成功;但在目录A中执行mvn compile,是不能成功。这个操作,我之前就做过了;而且我在实际项目中也是如此使用的,结果也相同。

多得你, 我也試到一些以前沒有留意到的東西 Smile

但我的結果仍然與之前我所說的符合哩.

我剛試過了. 在乾淨的環境 (把 local repo 的東西都清乾淨重來), 把 proficio 裡面所有的 pom 裡的 groupID 都修改過以免下載了網上的 POM. 以 proficio 來試,mvn install 後, 再故意把 proficio/proficio-stores 從 local repo 移走:

proficio/proficio-stores/proficio-store-memory/: mvn compile 成功. 原因是 Maven 原來 by default 是也會順便找 parent directory 來看看有沒有 parent POM (http://docs.codehaus.org/display/MAVENUSER/Creating+the+repositories 有提到, 這篇也是非常有用的資料建議也看. 這一點我以前也沒有留意), 所以其實它找到了 proficio/proficio-store 裡面的 POM. 再把 這 directory 的 POM 也移除的話, compile 就失敗了.

在 proficio-stores 中做類似的測試, 結果也相同. 只要在 local repo 或 parent directory 有 proficio 的 POM (stores 的 parent), compile 也是能過的.

再把 local repo 全都清乾淨, 不論 proficio-store 或 proficio-store-memory 都不能過. 不能過的原因則只是找不到 dependency 而不是找不到 parent POM (error message 不同的, 你可以留意)


B继承A,B是A的一个子模块;A继承example,A是example的一个子模块。
使用B的pom时,不寻找A中的pom或example中的pom;而使用A的pom时,确要寻找example中的pom?!
我的疑惑就是:看似相同结构的两个pom(A、B中的pom),但使用时却有如此大的差距!

我想你是搞錯了別的東西. 我上面的例子已經表明了, A 或 B 的情況是一樣的. Dependencies 般是會從 repo 找, 除非你是從 multi-module project 的頂層 build, 底下的 module 就能不必從 repo 也能找到. Parent POM 也是一樣, 只是加上會在上一層 directory 找. 規則就這麼簡單而已 Smile


alien edited on 2006-08-30 15:12
reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-30 19:52 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我想你是搞錯了別的東西. 我上面的例子已經表明了, A 或 B 的情況是一樣的. Dependencies 般是會從 repo 找, 除非你是從 multi-module project 的頂層 build, 底下的 module 就能不必從 repo 也能找到. Parent POM 也是一樣, 只是加上會在上一層 directory 找. 規則就這麼簡單而已
我真不知道搞错了什么Sad
不知您是否使用过我前面所述的例子?
我的local repo一直就没有任何与example,A或B有关的artifact。Black Eye


reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-08-30 23:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
我真不知道搞错了什么Sad
不知您是否使用过我前面所述的例子?
我的local repo一直就没有任何与example,A或B有关的artifact。Black Eye

我怎可能試得到你的例子呢? Smile
但 proficio 的 project 就和你的例子相符了嘍 Smile

倒不如你把一個簡單的例子打包好放在這裡, 我下載試試給你意見好了 Smile

btw, 你肯定你的 local repo (~/.m2/repository) 裡沒有相關的東西? 我懷疑你看到的 error 是別的error 而不關繼承的事


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-31 08:37 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
哈哈,很抱歉,是我没说清楚。
其实我所说的例子,它的目录结构和POM已经在前面的帖子中说过了。您可能认为这些目录中应该还有一些文件(如Java源文件),但实际上没有其它的文件了。这样应该也不会影响实验的结果吧。
不过在附件中的例子,我还是将Maven官方demo中的源代码(App)放了进去。

example.rar (1.37k)


reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-31 08:42 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我将三次运行mvn compile的结果附在下面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
D:\maven\example>mvn compile
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO]   Unnamed - example:example:pom:1.0
[INFO]   Unnamed - example:A:pom:1.0
[INFO]   Unnamed - example:B:jar:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Building Unnamed - example:example:pom:1.0
[INFO]    task-segment: [compile]
[INFO] -------------------------------------------------------------------------
---
[INFO] No goals needed for project - skipping
[INFO] -------------------------------------------------------------------------
---
[INFO] Building Unnamed - example:A:pom:1.0
[INFO]    task-segment: [compile]
[INFO] -------------------------------------------------------------------------
---
[INFO] No goals needed for project - skipping
[INFO] -------------------------------------------------------------------------
---
[INFO] Building Unnamed - example:B:jar:1.0
[INFO]    task-segment: [compile]
[INFO] -------------------------------------------------------------------------
---
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 1 source file to D:\maven\example\A\B\target\classes
[INFO]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Unnamed - example:example:pom:1.0 ..................... SUCCESS [0.010s]
[INFO] Unnamed - example:A:pom:1.0 ........................... SUCCESS [0.000s]
[INFO] Unnamed - example:B:jar:1.0 ........................... SUCCESS [2.273s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Aug 31 08:39:48 CST 2006
[INFO] Final Memory: 2M/8M
[INFO] ------------------------------------------------------------------------


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
D:\maven\example\A>mvn compile
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/example/example/1.0/example-1.0.pom
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).
 
Project ID: null:A:pom:1.0
 
Reason: Cannot find parent: example:example for project: null:A:pom:1.0
 
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.reactor.MavenExecutionException: Cannot find parent: example:ex
ample for project: null:A:pom:1.0
        at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:365)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:278)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
 
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.project.ProjectBuildingException: Cannot find parent
: example:example for project: null:A:pom:1.0
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(D
efaultMavenProjectBuilder.java:1161)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(D
efaultMavenProjectBuilder.java:1176)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(Def
aultMavenProjectBuilder.java:674)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFi
leInternal(DefaultMavenProjectBuilder.java:416)
        at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMave
nProjectBuilder.java:192)
        at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:515)
        at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:447)
        at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:491)
        at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:351)
        ... 11 more
Caused by: org.apache.maven.project.ProjectBuildingException: Error getting POM
for 'example:example' from the repository: Error transferring file
  example:example:pom:1.0
 
from the specified remote repositories:
  central (http://repo1.maven.org/maven2)
 
        at org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepo
sitory(DefaultMavenProjectBuilder.java:501)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(D
efaultMavenProjectBuilder.java:1157)
        ... 19 more
Caused by: org.apache.maven.artifact.resolver.ArtifactResolutionException: Error
 transferring file
  example:example:pom:1.0
 
from the specified remote repositories:
  central (http://repo1.maven.org/maven2)
 
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(De
faultArtifactResolver.java:140)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(De
faultArtifactResolver.java:63)
        at org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepo
sitory(DefaultMavenProjectBuilder.java:467)
        ... 20 more
Caused by: org.apache.maven.wagon.TransferFailedException: Error transferring fi
le
        at org.apache.maven.wagon.providers.http.LightweightHttpWagon.fillInputD
ata(LightweightHttpWagon.java:99)
        at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:68)
        at org.apache.maven.artifact.manager.DefaultWagonManager.getRemoteFile(D
efaultWagonManager.java:369)
        at org.apache.maven.artifact.manager.DefaultWagonManager.getArtifact(Def
aultWagonManager.java:282)
        at org.apache.maven.artifact.manager.DefaultWagonManager.getArtifact(Def
aultWagonManager.java:244)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(De
faultArtifactResolver.java:124)
        ... 22 more
Caused by: java.net.UnknownHostException: repo1.maven.org
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
        at java.net.Socket.connect(Socket.java:516)
        at java.net.Socket.connect(Socket.java:466)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
        at sun.net.www.http.HttpClient.New(HttpClient.java:287)
        at sun.net.www.http.HttpClient.New(HttpClient.java:299)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLC
onnection.java:796)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConne
ction.java:748)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection
.java:673)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
nection.java:917)
        at org.apache.maven.wagon.providers.http.LightweightHttpWagon.fillInputD
ata(LightweightHttpWagon.java:85)
        ... 27 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20 seconds
[INFO] Finished at: Thu Aug 31 08:41:14 CST 2006
[INFO] Final Memory: 1M/2M
[INFO] ------------------------------------------------------------------------


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
D:\maven\example\A\B>mvn compile
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------------
---
[INFO] Building Unnamed - example:B:jar:1.0
[INFO]    task-segment: [compile]
[INFO] -------------------------------------------------------------------------
---
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 1 source file to D:\maven\example\A\B\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Aug 31 08:41:59 CST 2006
[INFO] Final Memory: 2M/8M
[INFO] ------------------------------------------------------------------------

注:在目录B中运行命令时,我的local repo中并没有与example相关的artifact。

PS: btw是什么意思 Smile


jiangshachina edited on 2006-09-01 12:07
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-08-31 15:51 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
学习一段时间的Maven后,感觉它的主要目标是在project管理上(构建良好的目录结构,便于管理、测试与集成)。对于一些小而具体的工作,就不太关注了。
如,它能够完成我指定的mkdir,copy,delete,archive等等之类的工作吗Stupid(是不是又说回到Ant了Clown)
或者对于这些小工作,就由Ant完成(让Maven调用Ant),而让Maven只关注于工程本身。
关于这个问题,我还想了解。
如果使用Maven,主要是使用它的什么功能?或者说,Maven的什么优点最可能吸引我们?
如果我想利用Maven做些“细枝末节”的工作,是否合适?如,我想只运行某些JUnit;我只想编译某些源文件...
如果期望能够全面地完成工作,Maven是否必须与Ant配合使用?


jiangshachina edited on 2006-08-31 16:09
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-09-01 18:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你的例子的確如你所說, 真的有點奇怪哩.
但我在 profocio 則看不到有這個問題. 我懷疑是不是 maven 的 bug.
不如你試試往 maven 的 mail list 發封信去看看大家意見?
我的認知是 A 該能找到上層目錄的 parent POM 的.


关于这个问题,我还想了解。
如果使用Maven,主要是使用它的什么功能?或者说,Maven的什么优点最可能吸引我们?
如果我想利用Maven做些“细枝末节”的工作,是否合适?如,我想只运行某些JUnit;我只想编译某些源文件...
如果期望能够全面地完成工作,Maven是否必须与Ant配合使用?


的確 maven 不像script-like 的 ant.

maven 的魅力我個人覺得在於:
1) 標準化: 每個 project 都是用標準的方法去達成, 用 ant 則要多加很多自己檢點. 也因為他提倡的 "best practices", 也令你會很小心去安排如何分拆 components.
2) depednecies: 那些不同 version 的 artifcats 的依賴、管理等等, Maven 是做得很不錯. 尤其是大型和長時期的開發和維護, 這更是一個珍貴的feature

他的使用哲學和 ant 很不同, 需要一段時間消化, 但消化後其實就發覺有不少地方都做得蠻聰明的 Smile

和 ant 有一定程度的配搭使用我想是少不了的, 除非再多用一些時間去了解 plugin 怎樣寫...

P.S. btw 即是 by the way... Tongue


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-09-02 15:08 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
学了一段时间Maven,也在公司的已有项目中做了一些应用。
Maven里面的内容确实不少,要慢慢研究。

只是感觉对现有项目使用Maven很不方便,因为这些项目的目录布局与Maven的标准目录布局可能差距较大。


reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-09-03 12:48 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你的例子的確如你所說, 真的有點奇怪哩.
但我在 profocio 則看不到有這個問題. 我懷疑是不是 maven 的 bug.
不如你試試往 maven 的 mail list 發封信去看看大家意見?
我的認知是 A 該能找到上層目錄的 parent POM 的.
这还真的可能是一个BUG!
http://jira.codehaus.org/browse/MNG-740


reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-09-04 19:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
学了一段时间Maven,也在公司的已有项目中做了一些应用。
Maven里面的内容确实不少,要慢慢研究。

只是感觉对现有项目使用Maven很不方便,因为这些项目的目录布局与Maven的标准目录布局可能差距较大。


你說得對.

現有 project 要改用 maven 要面對的問題真的不少.
directory structure 還比較容易搞定, 只要在 global POM 設好 directory, 或每個 project 去修改一下就好了.

最慘還是有時一些不良的 module 分法, 例如一個大 project, 靠著 ant goal 不同來 build 不同的東西, 又或者 project 之間的 dependency 混亂, 這些都是很痛苦的 Sad

當然, plugin 功能不足, 選擇不足也是很慘的問題... Sad


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-09-04 19:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
这还真的可能是一个BUG!
http://jira.codehaus.org/browse/MNG-740

其實你的問題還好解決的.

只要確定曾經都由頂層 project install 過一次就好了.

之後裡面的個別 project 要 compile 就沒有問題了


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-09-05 08:46 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是的,要使用什么文件,就install这些文件。
我只是认为,对于继承应该弄的更直接一些。已经指明了parent POM的路径,为什么还要到repo中找呢?


jiangshachina edited on 2006-09-05 09:10
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-09-05 11:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
是的,要使用什么文件,就install这些文件。
我只是认为,对于继承应该弄的更直接一些。已经指明了parent POM的路径,为什么还要到repo中找呢?

1) 現在找不到 parent 看來只是 bug 而已, 而非 maven 的設計本身問題. 如果在上層或 relative path 找到 Parent POM, maven 當然不會去 local repo 去找嘍.

2) 在上層 (或 parent pom relative path)找不到 parent POM, 要去 repo 找, 我看不出有什麼問題吧? 我一直都在強調, POM 的繼承和 POM 的位置沒有一定關係. 最常見是我要弄一個 global 的 POM 讓所有 top project 來繼承, 如果不是放在 repo 讓人下載就很麻煩了.

也有人是用這種方法來安排 POM 的:

ProjectX/
 ProjectX-Common/
 ProjectX-Mod1/
 ProjectX-Mod2/

Parent POM 是放在 ProjectX-Common, 然後 Mod1 Mod2 是繼承自 Common. ProjectX 則是一個 multi-module project 來建 Common Mod1 Mod2. Mod1/Mod2 的 parent pom 設好 relative path 當然不會去 repo 找. 但如果 relative path 找不到, 到 repo 找也是很正常吧?


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-09-10 19:45 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在执行compile时,发现了一个奇怪的问题,我一共引用了20多个公司开发的jar,但其中有2个jar,maven会试图到central repository中下载,只是可能下载不到,才会到local repo中寻找。对此,我很疑惑Stupid每个jar的install-file过程都是一样的,而且都为它们加了一个artifact-version.pom文件。

这是由于artifact-version.pom的文件名写的有问题 Blush
一下子安装了几十个jar,还真得小心一点啊 Big Smile
经过上次的教训,这几天就做了一个install file的小程序,期望能够提高准确率和效率 Big Smile

不过这个程序的灵活性和功能比较少,就只能将期望的file安装到local repo中。
如果已经将mvn命令设置到了环境变量中,那么就请将Maven Home对应的文本框保持为空,否则程序会到指示的路径中找\bin\mvn.bat

GUI是用Eclispe VE做的,感觉自动生成的代码太多了Sad
程序使用的Look&Feel是Synthetica http://www.javasoft.de/jsf/public/products/synthetica,个人感觉做的确实比较好(比Metal强多了),只可惜有些明显的Bug。
另外,该程序只能用于JDK5.0,这也是由于Synthetica的原因。Synthetica只能在5.0环境中运行,不过附件中有源代码,如果想在其它环境下运行,把这个L&F去掉就可以了。
平时做些小东西,就可以学到一些知识,是一个积累的过程 Cool
主要是希望大大们对我的代码提些意见或建议Blush

artifactor.rar (318.78k)


jiangshachina edited on 2006-09-10 19:59
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-11-10 13:14 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我一直都在強調, POM 的繼承和 POM 的位置沒有一定關係. 最常見是我要弄一個 global 的 POM 讓所有 top project 來繼承, 如果不是放在 repo 讓人下載就很麻煩了.
我想知道,一般这个"Global POM"应该放些什么信息?
如果放依赖关系的话,是否可能存在着全公司的所有项目都可能需要依赖的jar文件呢?


reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-11-27 01:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
我想知道,一般这个"Global POM"应该放些什么信息?
如果放依赖关系的话,是否可能存在着全公司的所有项目都可能需要依赖的jar文件呢?

我自己想過的答案, 大概是
Plugin 與 Artifacts 的 Dependency Management (該不會太多機會要放 Dependency)
Project 結構的定義 (比如改動 default directory structure)
某些內定的 profile 之類吧


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-11-27 17:41 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我也觉得,可能只会放一些公司信息之类的内容吧。
<dependency>应该是不会了,但如果放<dependencyManagement>,可能会比较多吧。
实际上,我一直没有体会到<dependencyManagement>的好处。

已经使用了一段时间Maven,发现开发人员们并不喜欢使用它。
对于一个较大的工项目,需要将它拆分为多个Eclipse工程;如果是以前,可能只会建少量的工程。
项目的拆分,并不需要表现在Eclipse工程中,而是表现在package中。
不同的package可以存放于同一个Eclipse工程中。
以前使用Ant时,我们可以任意指定不同的目录中的Java源文件;而为了输出一个jar文件,我们需要为它建立一个Maven/Eclipse工程。
不过,这一点应该与大家的习惯有关。

另外,我目前使用CVS作为仓库共享的手段,但这种方法十分笨拙 Angry
因为我现在还没有创建好内部的远程共享仓库。
主要是无法远程deploy到共享仓库中,似乎这种方式不被允许(听说是HTTP的原因) Sad
"路漫漫,其修远矣,吾将上下而求索"!


jiangshachina edited on 2006-11-27 17:47
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-11-28 14:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
我也觉得,可能只会放一些公司信息之类的内容吧。
<dependency>应该是不会了,但如果放<dependencyManagement>,可能会比较多吧。
实际上,我一直没有体会到<dependencyManagement>的好处。

比如你有很多 project都用到 log4J
原本你要每個 project 都宣告用 log4J 的某個版本

但用了 dependency management 後, 你只要宣告用 log4j 就行了

dependency 除非很特別的情況否則我也覺得不會用到

另外剛想起, repositories 的宣告也該放在 global POM 裡 Smile


已经使用了一段时间Maven,发现开发人员们并不喜欢使用它。
对于一个较大的工项目,需要将它拆分为多个Eclipse工程;如果是以前,可能只会建少量的工程。
项目的拆分,并不需要表现在Eclipse工程中,而是表现在package中。
不同的package可以存放于同一个Eclipse工程中。
以前使用Ant时,我们可以任意指定不同的目录中的Java源文件;而为了输出一个jar文件,我们需要为它建立一个Maven/Eclipse工程。
不过,这一点应该与大家的习惯有关。

我也同意, 我之前嘗試作 migration 也是得到很多抱怨.

雖然把不同 module 分開得清清楚楚大家都明白是好的做法, 但實際上, 一來要大家學習一樣大家都不懂的東西, 二來原本跑得好好的東西要修改, 雖然原本的做法混亂難 maintain 大家還是不想轉.

再加上 Eclipse 不支援 hierarchical 的 project Sad 在 project structure 上和 Maven 的整合又再差了一點


另外,我目前使用CVS作为仓库共享的手段,但这种方法十分笨拙 Angry
因为我现在还没有创建好内部的远程共享仓库。
主要是无法远程deploy到共享仓库中,似乎这种方式不被允许(听说是HTTP的原因) Sad
"路漫漫,其修远矣,吾将上下而求索"!


deploy? 其實只要能把東西抄到那部機器就好了? 用 ftp 甚至當成 network share 直接 copy 也可以. Maven 的文件也說到, 不需要把 artifacts 放到 version control 裡面, 因為沒有必要

我的 maven migration project 也暫停了, 希望以後能完成 Sad


alien edited on 2006-11-28 14:38
reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-11-29 09:29 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
比如你有很多 project都用到 log4J
原本你要每個 project 都宣告用 log4J 的某個版本
但用了 dependency management 後, 你只要宣告用 log4j 就行了
可能正是由于目前只有一个项目使用Maven,所以我没有体会到使用<dependencyManagement>的好处 Cool

雖然把不同 module 分開得清清楚楚大家都明白是好的做法, 但實際上, 一來要大家學習一樣大家都不懂的東西, 二來原本跑得好好的東西要修改, 雖然原本的做法混亂難 maintain 大家還是不想轉.
细化module确实是一个好的作法,但如果有些module需要一些相同的资源文件,那么这些文件应该就会存在多个复本。不过,这一点可能并不是一个问题,主要是看大家的思维方式了。
以前使用Ant时,build脚本中的的冗余语句比较多,而且脚本的移植性比较弱。每个人从CVS checkout了工程(含build脚本)之后,都需要修改比较多的与路径相关的语句。因为这些Ant build脚本不仅是针对整个产品,也有针对各个module的。
使用Maven确实觉得它的移植性很强,基本上不需要修改任何脚本,就可以随处使用。POM的继承性,也使得脚本语句的量比较少,层次结构也更清晰。而且也不太可能像写Ant脚本那样“随心所欲”地写POM文件,这也使得更加能够写出风格相同的Maven build脚本了。
针对Maven的使用者而言,应该只需要掌握少数几条Build Life Cycle Phase(clean, compile, package, install, deploy)应该就可以了吧。主要是看大家是否愿意使用罢了。
在开发时,为Eclipse Build Path从Maven本地仓库中l添加jar文件,可能是有些麻烦。因为大家都不清楚,也不想搞清楚这个“仓库”的结构。不过,定期使用mvn eclipse:eclipse重新生成一下.classpath文件应该也是可行的,但这也要看使用者的意愿了。如果对Eclipse的工程描述符文件有些了解的话,应该也不必担心新生成的.classpath或.project文件是否会与本地工程的实际情况有不符合的情况了。
另外在写依赖时,为了确定一个artifact的groupId,我需要先到http://mvnrepository.com/artifact/maven查找,然后才能确定。因为Maven central repository中有许多冗余的artifact,主要是后来对groupId进行了修改。
更不好的是,本来Maven自动加载transitive denpendency的功能是比较好的,但现在很多artifact的开发者们,没有将他们自己开发的artifact的依赖关系整理好。使得不少的transitive denpendency是无用的。这样,我在制作一个war文件时,WEB-INF/lib目录下可能有一大堆实际上无用的jar文件。既增加war的footprint,又使jar文件混乱(有点像以前使用Ant时,将一个目录下所有的jar直接copy到WEB-INF/lib目录,而根本不管它们是否会被使用)。

再加上 Eclipse不支援 hierarchical 的 project Sad 在 project structure 上和 Maven 的整合又再差了一點
Eclipse project虽然看起来都在同一个“水平线”上,但层次结构应该首先只是逻辑上的。而且我个人认为,Maven的父、子module,本质上应该也没有什么不同。当部署到仓库中之后,它们也可能处在同一个目录中。而且我记得您也说过,继承与它们的相对位置无关 Smile
另外,针对Maven2,似乎还没有好的Eclipse插件。所以我将Maven配置为Eclipse的外部工具,将每一个常用的命令组合(如package, clean install, eclipse:eclipse, clean package jboss:harddeploy)都配置为一个外部工具。从目前的使用来看,应该还是足够了的。

deploy? 其實只要能把東西抄到那部機器就好了? 用 ftp 甚至當成 network share 直接 copy 也可以. Maven 的文件也說到, 不需要把 artifacts 放到 version control 裡面, 因為沒有必要
直接copy到远程共享仓库,这种方法我也试过,但觉得也不好。其实觉得这些方法都不是创建内部共享仓库的“正宗”方法(我脑筋有些死哦 Tongue)。

我的 maven migration project 也暫停了, 希望以後能完成
Good Luck! me too Big Smile


jiangshachina edited on 2006-11-29 09:54
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
alien

小弟劣作一幅



發文: 772
積分: 6
於 2006-12-01 12:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jiangshachina wrote:
在开发时,为Eclipse Build Path从Maven本地仓库中l添加jar文件,可能是有些麻烦。因为大家都不清楚,也不想搞清楚这个“仓库”的结构。不过,定期使用mvn eclipse:eclipse重新生成一下.classpath文件应该也是可行的,但这也要看使用者的意愿了。如果对Eclipse的工程描述符文件有些了解的话,应该也不必担心新生成的.classpath或.project文件是否会与本地工程的实际情况有不符合的情况了。

這部份我也沒有更好的解法...

定期用 eclipse:eclipse 但只能手動地 replace .classpath
(.project replace 了就麻煩了)

記得有人 (是你嗎?) 提過一個 m2eclipse 的 plugin. 能在 eclipse 直接加入 dependencies, 當然相對應的 pom.xml 也會自動修改. 這樣該是比較好的解決辦法. 不過我還沒有機會去試. 我比較擔心的是 POM 與 eclipse 的 project 的內容對應方面會不會有問題而已 (比如修改一方, 就把另一方不相干的東西都覆蓋了 etc)

我是不建議要 developer 自己到 local repository 加入啦...

Eclipse project虽然看起来都在同一个“水平线”上,但层次结构应该首先只是逻辑上的。而且我个人认为,Maven的父、子module,本质上应该也没有什么不同。当部署到仓库中之后,它们也可能处在同一个目录中。而且我记得您也说过,继承与它们的相对位置无关 Smile

你說的沒錯 Smile

但其實我的重點是 Eclipse 的 project 缺少了繼承的機制. 比如我的 "父" project 的 classpath 更改了, 我還是得自己修改 "子" project... Sad

還有 Maven 的 Multi-module project 其中一個重點是讓你可以在 parent project 做動作就會順道向每一個 sub-project 做. 這也是 Eclipse 欠的.

當然也不是什麼大問題, 只是令到有些 maven 的使用習慣不能順理成章的用在 Eclipse 上.


另外,针对Maven2,似乎还没有好的Eclipse插件。所以我将Maven配置为Eclipse的外部工具,将每一个常用的命令组合(如package, clean install, eclipse:eclipse, clean package jboss:harddeploy)都配置为一个外部工具。从目前的使用来看,应该还是足够了的。

好像 m2eclipse 也有這些功能? (沒有機會試 XDD)



直接copy到远程共享仓库,这种方法我也试过,但觉得也不好。其实觉得这些方法都不是创建内部共享仓库的“正宗”方法(我脑筋有些死哦 Tongue)。

不會不正宗吧?

maven 本身deploy 就有不同的方法作 deploy 了, copy 好像是其中一種 (好像還有 ftp, scp 之類).

重點是, 你把東西抄去某地方用什麼方法都可以, 但你要 access 這倉庫就要經 repository server 了 (自己建的 web server, 或利用 Proximity 之類)


Good Luck! me too Big Smile

我想我可能看不到正式跑 maven 的一天了 Tongue


reply to postreply to post

public class Alien {
public boolean isNewbie() {
return true;
}
public String toString() {
return "請大家多多指教";
}
}
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2006-12-01 20:15 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
這部份我也沒有更好的解法...

定期用 eclipse:eclipse 但只能手動地 replace .classpath
(.project replace 了就麻煩了)
确实对于比较复杂的工程(如MyEclipse的Web project),那么不能让mvn eclipse:eclipse直接覆盖.project文件。所以我一般是新建一个无用的Eclipse工程,然后那实际工程中的pom.xml copy到这个工程中,然后在这个工程里做mvn eclipse:eclipse,最后把该工程的.classpath文件中与var M2_REPO相关的语句替换掉实际工程中的相应语句。这也算是“曲线救国”了 Big Smile

記得有人 (是你嗎?) 提過一個 m2eclipse 的 plugin. 能在 eclipse 直接加入 dependencies, 當然相對應的 pom.xml 也會自動修改.
...
好像 m2eclipse 也有這些功能? (沒有機會試 XDD)
我确实曾经请教过关于这个插件的问题。
但我也一直没有用过这个插件,因为安装了它之后,发现它不能使用 Sad
所以我说目前没有好的针对Maven2的插件。
有比较成熟的Maven1插件(Maven官方的,MyEclipse的),唉,可惜用不上了 Smile

但其實我的重點是 Eclipse 的 project 缺少了繼承的機制. 比如我的 "父" project 的 classpath 更改了, 我還是得自己修改 "子" project...
你是想让Eclipse的.classpath,.project等文件也可以被关联,被重构吗?
可以向Eclipse官方提提这个idea Cool

不會不正宗吧?
maven 本身deploy 就有不同的方法作 deploy 了, copy 好像是其中一種 (好像還有 ftp, scp 之類).
重點是, 你把東西抄去某地方用什麼方法都可以, 但你要 access 這倉庫就要經 repository server 了 (自己建的 web server, 或利用 Proximity 之類)
关于构建远程共享仓库,方法应该是比较多。但我仍然认为直接copy的方法肯定是不好了,嘿嘿 Blush
从Maven的mail list中来看,大家似乎比较看好WebDav。
我不懂这玩意儿,所以也正想研究研究。

在大陆这边,Maven应该用的不多;不知在海峡对岸,Maven是否流行?
目前Maven肯定还不成熟,我都能用出bug,那么问题肯定是多了(我用Ant时,还没碰到过bug)。
目前最烦恼的就是Maven Central Repository中“杂乱”的artifact。
本来Maven自动加载“依赖的依赖”(transitive dependency)是一个很好的方法,但很多artifact的开发者们,并没有将他们自己产品的依赖关系整理清楚。
同一个被依赖的transitive artifact,可能在不同的产品(artifact)中有不同的groupId(可能是由于同时支持Maven1与Maven2);无用的artifact也可能被放到依赖中了...
这样,在制作war文件时,WEB-INF/lib中的jar文件可能有多个相同的artifact(不同的版本),也可能有些是冗余的...
这确实是个令人烦恼的问题 Sad


jiangshachina edited on 2006-12-01 20:33
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
作者 Re:如何写Maven的POM.xml文件? [Re:jiangshachina]
jiangshachina

Hi, Java!



發文: 565
積分: 1
於 2007-02-07 16:38 user profilesend a private message to usersend email to jiangshachinareply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
有较长的一段时间没有研究Maven了,但有时候也看看它 Tongue
今天在Nabble的Maven mail list中闲逛了一下,发现一组关于deploy site问题的帖子。
根据这个帖子我解决了一个长期以来“困绕”自己的问题--发布artifact到Maven Remote Repository。
alien said:
不會不正宗吧?
maven 本身deploy 就有不同的方法作 deploy 了, copy 好像是其中一種 (好像還有 ftp, scp 之類).
重點是, 你把東西抄去某地方用什麼方法都可以, 但你要 access 這倉庫就要經 repository server 了 (自己建的 web server, 或利用 Proximity 之類)
jiangshachina said:
关于构建远程共享仓库,方法应该是比较多。但我仍然认为直接copy的方法肯定是不好了,嘿嘿 Blush
从Maven的mail list中来看,大家似乎比较看好WebDav。
我不懂这玩意儿,所以也正想研究研究。
以前一直没有成功地向remote repo上传artifact,在于使用的HTTP协议不支持这种上传方式。
虽然也知道可以使用其它的协议(FTP,SSH,...),但因为对于网络、协议之类的东东一直不太了解,自以为使用这些协议可能比较“麻烦”。
而自己又追求所谓“正宗”的方法,所以也不想使用直接copy文件的方法 Blush

今天就试了一下SSH协议,使用scp向远程Linux服务器中的某个目录发布了一个简单的artifact。
没想到竟然成功了,哈哈,有些事情可能就是那么的简单 Cool
主要是看自己的那根死脑筋应该如何转活Clown


jiangshachina edited on 2007-02-07 16:47
reply to postreply to post
a cup of Java, cheers!
同是Java爱好者,相逢何必曾相识!
go to first page go to previous page  1   2  go to next page go to last page
» JWorld@TW »  Java Tools

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8