Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Problems with Building -- Exporting aspects across multiple projects in eclipse

Hi Andy,
So, I am able to reproduce the same behavior from the command line.  I
don't understand what's going on either.  Here are the steps I did:

1 do a full clean build in eclipse, with tests in correct state
2 run tests in eclipse, all pass
3 run tests on command line, with CLASSPATH pointing to eclipse output
folders, all pass
4 introduce an error into one test by changing a string
5 let eclipse do an incremental build (can see only the class with the
string changed gets rebuilt in the trace window)
6 run the javap command, confirm that the incorrect string is in the
expected class file in the expected folder
7 run tests in eclipse, they pass but should not
8 run on command line, tests pass but should not
9 do a full clean build in eclipse
10 javap confirms that the error is still there
11 run tests in eclipse-- get expected error
12 run tests on command line-- get expected error

I too don't see where the old file could be living.  Maybe the new
file is not getting updated correctly?  I also used javap to search
for the correct and incorrect string-- I only see one at a time, when
I expect to see it (rather that maybe seeing both of them in there).
Any other ideas or things I can test?

Thanks   Mike


On Fri, Apr 11, 2008 at 4:36 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
> Are you able to run the testcase outside of eclipse from the command
>  line?  I can't see where it is getting the old classfile from when
>  executing the test if the .class on the disk is correct...
>
>
>
>  Andy.
>
>  On 11/04/2008, Mike Schneider <mikepschneider@xxxxxxxxx> wrote:
>  > The time stamp on the class file is updated.  The new string does
>  >  appear in the class
>  >  file when I use the javap command.  But I still see this behavior.
>  >
>  >  I also tried: disabling inlining of code, and removing the binary
>  >  output folder of the aspects
>  >  project from the aspectpath and the classpath of project C.  None of
>  >  those solved the behavior.
>  >
>  >  The only thing that seems to fix it is to remove the aspectj nature of
>  >  project C.  So it seems
>  >  that when the aspectj nature is on, and the java files are compiled
>  >  with ajc, that the
>  >  correct class files are generated, but when I launch they are somehow
>  >  not picked up by the code
>  >  that is executing.
>  >
>  >
>  >  On Fri, Apr 11, 2008 at 3:21 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
>  >  > So you can run the test in project C without the aspecpath being set
>  >  >  for the project, if it is just a logging aspect?  Does the test pickup
>  >  >  the string change in this case?
>  >  >
>  >  >  Does the timestamp on file X change on the disk when it is rebuilt?
>  >  >  Can you use javap -verbose on it to check it really has the new string
>  >  >  value in the class file?
>  >  >
>  >  >  You could try switching off around advice inlining in project C to see
>  >  >  if that makes any difference (in one of the AJDT preference menus) -
>  >  >  it shouldn't... but it is something to try.
>  >  >
>  >  >
>  >  >
>  >  >  Andy.
>  >  >
>  >  >  On 11/04/2008, Mike Schneider <mikepschneider@xxxxxxxxx> wrote:
>  >  >  > I am not using inpath, only aspectpath.
>  >  >  >
>  >  >  >  I changed a string in java file X in project C.  The unit test that
>  >  >  >  referred to that string also lived in project C.  I could see that
>  >  >  >  only file X was the one file that got recompiled and rewoven.  I did
>  >  >  >  not expect any other files to be recompiled and did not see any, only
>  >  >  >  file X was recompiled.
>  >  >  >
>  >  >  >  The aspect is a simple entry-and-exit logging using an around advice.
>  >  >  >  The unit test does not depend on the aspect actually being there to
>  >  >  >  pass.
>  >  >  >
>  >  >  >  I'll see if I can reproduce it with a sample set of projects.
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >  On Fri, Apr 11, 2008 at 1:22 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
>  >  >  >  > > With all of the event tracing on, when I changed the file and save it,
>  >  >  >  >  > I see that AJC recompiles and reweaves that one file.  It does not
>  >  >  >  >
>  >  >  >  > > show any obvious errors or other problems.  But, when I run the unit
>  >  >  >  >  > test in eclipse I don't see my change.  Only when I do a full rebuild
>  >  >  >  >  > do I see the changes in the unit test.
>  >  >  >  >
>  >  >  >  >  Which file to do you change?  Something in the Aspect project? Project C?
>  >  >  >  >  Does the change you expect to see in the unit test rely on the aspect being
>  >  >  >  >  rewoven?  The unit test is in which project C?
>  >  >  >  >  When you make the change and save it, and see it rebuild/reweave - is there
>  >  >  >  >  a file in a dependent project you would expect to be seeing rebuilt but it
>  >  >  >  >  does not?
>  >  >  >  >
>  >  >  >  >  This might be easier with a concrete set of test projects that exhibit
>  >  >  >  >  the problem.
>  >  >  >  >  Right now I don't know why this would be failing, if the event trace view shows
>  >  >  >  >  something is rebuilt/rewoven then the new version is on the disk and when
>  >  >  >  >  executing the tests, that is the version that will be used.  Elements on the
>  >  >  >  >  aspectpath are implicitly included on the classpath for a project as
>  >  >  >  >  well, I hope
>  >  >  >  >  that isn't causing you a problem with a type in the aspect project overriding
>  >  >  >  >  some type from another project.  You aren't using inpath anywhere are you?
>  >  >  >  >
>  >  >  >  >
>  >  >  >  >
>  >  >  >  >  Andy.
>  >  >  >  >
>  >  >  >  >  On 11/04/2008, Mike Schneider <mikepschneider@xxxxxxxxx> wrote:
>  >  >  >  >  > My projects are set up as such (somewhat simplified, as I really have
>  >  >  >  >  >  8 eclipse projects, but I'll describe what I believe is relevant)
>  >  >  >  >  >
>  >  >  >  >  >  Projects Aspects is the base project (and contains only one aspect
>  >  >  >  >  >  file, and no java files)
>  >  >  >  >  >  Project A includes the binary output folder from Project Aspects on
>  >  >  >  >  >  its aspect path
>  >  >  >  >  >  Project B depends on project A, and includes the binary output folder
>  >  >  >  >  >  from Project Aspects on its aspect path
>  >  >  >  >  >  Project C depends on project B, and includes the binary output folder
>  >  >  >  >  >  from Project Aspects on its aspect path
>  >  >  >  >  >
>  >  >  >  >  >  All 4 projects have aspectj nature turned on.
>  >  >  >  >  >
>  >  >  >  >  >  I noticed the particular issue below in Project C, but my colleagues
>  >  >  >  >  >  have observed it in other projects (B for instance).
>  >  >  >  >  >
>  >  >  >  >  >  With all of the event tracing on, when I changed the file and save it,
>  >  >  >  >  >  I see that ACJ recompiles and reweaves that one file.  It does not
>  >  >  >  >  >  show any obvious errors or other problems.  But, when I run the unit
>  >  >  >  >  >  test in eclipse I don't see my change.  Only when I do a full rebuild
>  >  >  >  >  >  do I see the changes in the unit test.
>  >  >  >  >  >
>  >  >  >  >  >  My version info is as follows:
>  >  >  >  >  >  AJDT Version: 1.5.2.200804031719
>  >  >  >  >  >  AspectJ version: 1.6.0.20081300000000
>  >  >  >  >  >
>  >  >  >  >  >  Any ideas?
>  >  >  >  >  >
>  >  >  >  >  >
>  >  >  >  >  >
>  >  >  >  >  >
>  >  >  >  >  >  On Fri, Apr 11, 2008 at 12:44 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
>  >  >  >  >  >  > How are your projects configured? Did you go for aspectpath or inpath?
>  >  >  >  >  >  >   So you have AJDT Project A  and Java Project B with B depending on A
>  >  >  >  >  >  >  via aspectpath ?  You make the change where ? to java code in A or B?
>  >  >  >  >  >  >
>  >  >  >  >  >  >   Are you on a recent version of AJDT (I made some changes to
>  >  >  >  >  >  >  incremental compilation recently).
>  >  >  >  >  >  >
>  >  >  >  >  >  >  To understand what is/isnt getting built you can activate the AJDT
>  >  >  >  >  >  >  Event Trace view in eclipse, turn on full reporting of all types of
>  >  >  >  >  >  >  event (button in top right) and then when you make your change it will
>  >  >  >  >  >  >  tell you everything it is doing. Does something in there not look
>  >  >  >  >  >  >  right?
>  >  >  >  >  >  >
>  >  >  >  >  >  >  Andy.
>  >  >  >  >  >  >
>  >  >  >  >  >  >
>  >  >  >  >  >  >
>  >  >  >  >  >  >  On 11/04/2008, Mike Schneider <mikepschneider@xxxxxxxxx> wrote:
>  >  >  >  >  >  >  > Thanks Andy.  I basically figured out the same thing after some
>  >  >  >  >  >  >  >  hunting.  This technique works and it shows the correct markers in my
>  >  >  >  >  >  >  >  code.
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  However, I have a second problem.  Now when I run my code within
>  >  >  >  >  >  >  >  eclipse it does not pick up my recent changes to the java
>  >  >  >  >  >  >  >  files without doing a clean.  For instance, I have a unit test that
>  >  >  >  >  >  >  >  passes.  I update some of the data inputted to the unit test
>  >  >  >  >  >  >  >  such that it shouldn't pass.   I run it again (with build
>  >  >  >  >  >  >  >  automatically turned on) and it still passes.  I do a full clean,
>  >  >  >  >  >  >  >  allow the
>  >  >  >  >  >  >  >  rebuild to run, and run it again, and the test fails.  The only
>  >  >  >  >  >  >  >  solution I have currently is to disable aspects, or to do a full clean
>  >  >  >  >  >  >  >  each time
>  >  >  >  >  >  >  >  I execute.
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  Any idea what's going on here, and how I can fix it?    Thanks
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  Mike
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  On Mon, Apr 7, 2008 at 9:28 AM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
>  >  >  >  >  >  >  >  > Hello Mike,
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  >  Aspects from a project upon which you depend are not automatically
>  >  >  >  >  >  >  >  >  picked up unless they can be found on the aspect path for the project
>  >  >  >  >  >  >  >  >  you want to get woven.
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  >  > I also tried adding the folder
>  >  >  >  >  >  >  >  >  >  containing the .aj files to the Inpath of the derived project and the
>  >  >  >  >  >  >  >  >  >  AspectJ path of the derived project.
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  >  Like classpath, the inpath and aspectpath are for jars and directories
>  >  >  >  >  >  >  >  >  containing class files, not source files.  You need to put the bin
>  >  >  >  >  >  >  >  >  folder of the project where the aspects are built onto the aspectpath
>  >  >  >  >  >  >  >  >  of the projects you want to be woven. ( I know this could be more UI
>  >  >  >  >  >  >  >  >  friendly and involve some simple clicks rather than path
>  >  >  >  >  >  >  >  >  configuration).  With the compiled aspects on the aspectpath, the
>  >  >  >  >  >  >  >  >  projects will get woven.  Now, showing across project markers is quite
>  >  >  >  >  >  >  >  >  complicated (perhaps I mean  'not always 100% reliable' ....) so the
>  >  >  >  >  >  >  >  >  best way to verify your code is woven as you expect is to run your
>  >  >  >  >  >  >  >  >  tests.  Or you could turn on the weave info messages in the UI and
>  >  >  >  >  >  >  >  >  then information about what gets woven will come out in the problems
>  >  >  >  >  >  >  >  >  view as info messages.
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  >  Andy.
>  >  >  >  >  >  >  >  >  _______________________________________________
>  >  >  >  >  >  >  >  >  aspectj-users mailing list
>  >  >  >  >  >  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  >  >  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >  >  >  >  >  >
>  >  >  >  >  >  >  >  _______________________________________________
>  >  >  >  >  >  >  >  aspectj-users mailing list
>  >  >  >  >  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  >  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >  >  >  >  >
>  >  >  >  >  >  >  _______________________________________________
>  >  >  >  >  >  >  aspectj-users mailing list
>  >  >  >  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >  >  >  >
>  >  >  >  >  >  _______________________________________________
>  >  >  >  >  >  aspectj-users mailing list
>  >  >  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >  >  >
>  >  >  >  >  _______________________________________________
>  >  >  >  >  aspectj-users mailing list
>  >  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >  >
>  >  >  >  _______________________________________________
>  >  >  >  aspectj-users mailing list
>  >  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >  >
>  >  >  _______________________________________________
>  >  >  aspectj-users mailing list
>  >  >  aspectj-users@xxxxxxxxxxx
>  >  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >  >
>  >  _______________________________________________
>  >  aspectj-users mailing list
>  >  aspectj-users@xxxxxxxxxxx
>  >  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>  >
>  _______________________________________________
>  aspectj-users mailing list
>  aspectj-users@xxxxxxxxxxx
>  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top