1- package de .andrena .tools .nopackagecycles ;
2-
3- import java .io .File ;
4- import java .io .IOException ;
5- import java .util .ArrayList ;
6- import java .util .Collection ;
7-
8- import jdepend .framework .JDepend ;
9- import jdepend .framework .JavaPackage ;
10-
11- import org .apache .maven .enforcer .rule .api .EnforcerRule ;
12- import org .apache .maven .enforcer .rule .api .EnforcerRuleException ;
13- import org .apache .maven .enforcer .rule .api .EnforcerRuleHelper ;
14- import org .codehaus .plexus .component .configurator .expression .ExpressionEvaluationException ;
15-
16- public class NoPackageCyclesRule implements EnforcerRule {
17-
18- private boolean includeTests = true ;
19-
20- public void execute (EnforcerRuleHelper helper ) throws EnforcerRuleException {
21- try {
22- executePackageCycleCheckIfNecessary (helper );
23- } catch (ExpressionEvaluationException e ) {
24- throw new EnforcerRuleException ("Unable to lookup an expression " + e .getLocalizedMessage (), e );
25- } catch (IOException e ) {
26- throw new EnforcerRuleException ("Unable to access target directory " + e .getLocalizedMessage (), e );
27- }
28- }
29-
30- private void executePackageCycleCheckIfNecessary (EnforcerRuleHelper helper )
31- throws ExpressionEvaluationException , IOException , EnforcerRuleException {
32- DirectoriesWithClasses directories = new DirectoriesWithClasses (helper , includeTests );
33- if (directories .directoriesWithClassesFound ()) {
34- executePackageCycleCheck (directories );
35- } else {
36- helper .getLog ().info ("No directories with classes to check for cycles found." );
37- }
38- }
39-
40- private void executePackageCycleCheck (Iterable <File > directories ) throws IOException , EnforcerRuleException {
41- JDepend jdepend = createJDepend ();
42- for (File directory : directories ) {
43- jdepend .addDirectory (directory .getAbsolutePath ());
44- }
45- jdepend .analyze ();
46- if (jdepend .containsCycles ()) {
47- throw new EnforcerRuleException ("There are package cycles:" + getPackageCycles (jdepend ));
48- }
49- }
50-
51- protected JDepend createJDepend () {
52- return new JDepend ();
53- }
54-
55- private String getPackageCycles (JDepend jdepend ) {
56- Collection <JavaPackage > packages = jdepend .getPackages ();
57- return new PackageCycleOutput (new ArrayList <JavaPackage >(packages )).getOutput ();
58- }
59-
60- public String getCacheId () {
61- return "" ;
62- }
63-
64- public boolean isCacheable () {
65- return false ;
66- }
67-
68- public boolean isResultValid (EnforcerRule arg0 ) {
69- return false ;
70- }
71-
72- public void setIncludeTests (boolean includeTests ) {
73- this .includeTests = includeTests ;
74- }
1+ package de .andrena .tools .nopackagecycles ;
2+
3+ import java .io .File ;
4+ import java .io .IOException ;
5+ import java .util .ArrayList ;
6+ import java .util .Collection ;
7+ import java .util .List ;
8+
9+ import jdepend .framework .JDepend ;
10+ import jdepend .framework .JavaPackage ;
11+ import jdepend .framework .PackageFilter ;
12+
13+ import org .apache .maven .enforcer .rule .api .EnforcerRule ;
14+ import org .apache .maven .enforcer .rule .api .EnforcerRuleException ;
15+ import org .apache .maven .enforcer .rule .api .EnforcerRuleHelper ;
16+ import org .codehaus .plexus .component .configurator .expression .ExpressionEvaluationException ;
17+
18+ public class NoPackageCyclesRule implements EnforcerRule {
19+
20+ private boolean includeTests = true ;
21+ private List <String > includedPackages = new ArrayList <>();
22+ private List <String > excludedPackages = new ArrayList <>();
23+
24+ public void execute (EnforcerRuleHelper helper ) throws EnforcerRuleException {
25+ try {
26+ executePackageCycleCheckIfNecessary (helper );
27+ } catch (ExpressionEvaluationException e ) {
28+ throw new EnforcerRuleException ("Unable to lookup an expression " + e .getLocalizedMessage (), e );
29+ } catch (IOException e ) {
30+ throw new EnforcerRuleException ("Unable to access target directory " + e .getLocalizedMessage (), e );
31+ }
32+ }
33+
34+ private void executePackageCycleCheckIfNecessary (EnforcerRuleHelper helper )
35+ throws ExpressionEvaluationException , IOException , EnforcerRuleException {
36+ DirectoriesWithClasses directories = new DirectoriesWithClasses (helper , includeTests );
37+ if (directories .directoriesWithClassesFound ()) {
38+ executePackageCycleCheck (helper , directories );
39+ } else {
40+ helper .getLog ().info ("No directories with classes to check for cycles found." );
41+ }
42+ }
43+
44+ private void executePackageCycleCheck (EnforcerRuleHelper helper , Iterable <File > directories ) throws IOException , EnforcerRuleException {
45+ JDepend jdepend = createJDepend (helper );
46+ for (File directory : directories ) {
47+ jdepend .addDirectory (directory .getAbsolutePath ());
48+ }
49+ jdepend .analyze ();
50+ if (jdepend .containsCycles ()) {
51+ throw new EnforcerRuleException ("There are package cycles:" + getPackageCycles (jdepend ));
52+ }
53+ }
54+
55+ protected JDepend createJDepend (EnforcerRuleHelper helper ) {
56+ if (!includedPackages .isEmpty ()) {
57+ helper .getLog ().warn ("Package cycles rule check is restricted to check only these packages: " + includedPackages );
58+ }
59+ if (!excludedPackages .isEmpty ()) {
60+ helper .getLog ().warn ("These packages were excluded from package cycle rule check: " + excludedPackages );
61+ }
62+ return new JDepend (PackageFilter .all ()
63+ .including (includedPackages )
64+ .excluding (excludedPackages ));
65+ }
66+
67+ private String getPackageCycles (JDepend jdepend ) {
68+ Collection <JavaPackage > packages = jdepend .getPackages ();
69+ return new PackageCycleOutput (new ArrayList <JavaPackage >(packages )).getOutput ();
70+ }
71+
72+ public String getCacheId () {
73+ return "" ;
74+ }
75+
76+ public boolean isCacheable () {
77+ return false ;
78+ }
79+
80+ public boolean isResultValid (EnforcerRule arg0 ) {
81+ return false ;
82+ }
83+
84+ public void setIncludeTests (boolean includeTests ) {
85+ this .includeTests = includeTests ;
86+ }
87+
88+ public void setIncludedPackages (List <String > includedPackages ) {
89+ this .includedPackages = includedPackages ;
90+ }
91+
92+ public void setExcludedPackages (List <String > excludedPackages ) {
93+ this .excludedPackages = excludedPackages ;
94+ }
95+
7596}
0 commit comments